在条形图中使用色相时,让Seaborn显示色标而不是图例?
发布于 2021-01-29 14:55:19
假设我要绘制一个条形图,其中条形的色调代表一些连续的数量。例如
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做到这一点?
关注者
0
被浏览
123
1 个回答
-
另一个答案是有点hacky。因此,更严格的解决方案(不生成随后删除的图)将涉及手动创建ScalarMappable作为色条的输入。
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) sm.set_array([]) 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) plt.show()