python 在条形图中使用色调时,是否使seaborn显示颜色条而不是图例?

inkz8wg9  于 2023-06-04  发布在  Python
关注(0)|答案(2)|浏览(340)

假设我想绘制一个条形图,其中条形图的色调表示一些连续的量。例如

import seaborn as sns
titanic = sns.load_dataset("titanic")
g = titanic.groupby('pclass')
survival_rates = g['survived'].mean()
n = g.size()
ax = sns.barplot(x=n.index, y=n,
           hue=survival_rates, palette='Reds',
            dodge=False,
          )
ax.set_ylabel('n passengers')

这里的传说有点傻,我策划的酒吧越多,情况就越糟。最有意义的是一个颜色条(比如调用sns.heatmap时使用的颜色条)。有办法让seaborn这么做吗?

0lvr5msh

0lvr5msh1#

这个answer是低效的,因为它生成一个图,然后将其删除。
相反,创建一个ScalarMappable作为colorbar的输入。

import matplotlib.pyplot as plt
import seaborn as sns
titanic = sns.load_dataset("titanic")
g = titanic.groupby('pclass')
survival_rates = g['survived'].mean()
n = g.size()

norm = plt.Normalize(survival_rates.min(), survival_rates.max())
sm = plt.cm.ScalarMappable(cmap="Reds", norm=norm)

ax = sns.barplot(x=n.index, y=n, hue=survival_rates, palette='Reds', 
                 dodge=False)

ax.set_ylabel('n passengers')
ax.get_legend().remove()
ax.figure.colorbar(sm, ax=ax)

plt.show()

d6kp6zgx

d6kp6zgx2#

你可以试试这个:

import matplotlib.pyplot as plt
import seaborn as sns
titanic = sns.load_dataset("titanic")
g = titanic.groupby('pclass')
survival_rates = g['survived'].mean()
n = g.size()

plot = plt.scatter(n.index, n, c=survival_rates, cmap='Reds')
plt.clf()
plt.colorbar(plot)
ax = sns.barplot(x=n.index, y=n, hue=survival_rates, palette='Reds', dodge=False)
ax.set_ylabel('n passengers')
ax.legend_.remove()

输出:

相关问题