如何在seaborn barplot中使用NaN值作为具有定义颜色的色调

Posted

技术标签:

【中文标题】如何在seaborn barplot中使用NaN值作为具有定义颜色的色调【英文标题】:How to use NaN values as a hue with a defined color in seaborn barplot 【发布时间】:2021-03-04 09:43:28 【问题描述】:

假设我有一个类似于下图中的 DataFrame (df),但 Score 列中缺少值:

我想绘制一个水平的 seaborn 条形图,Pvalue 在 x 轴上,条形的颜色对应于 Score。即使我定义了一个颜色图并告诉它将 NaN 显示为黑条,它们也根本不会显示。

import seaborn as sns
from matplotlib import cm

bwrNan = copy(cm.get_cmap('bwr'))
bwrNan.set_bad('black')
cm.register_cmap("mycmap", bwrNan)
sns.barplot(data=df, x='Pvalue', y='Labels', hue='Score', palette='mycmap', linewidth=2, edgecolor='k', dodge=False)

另一方面,如果我尝试在 seaborn 热图中使用相同的数据,我会得到正确的颜色:

sns.heatmap(data=df[['Score']], cmap='mycmap')

【问题讨论】:

【参考方案1】:

快速for 循环怎么样:

for i,r in df.iterrows():
    color = 'k' if np.isnan(r['Score']) else bwrNan(r['Score'])
    plt.barh(r['Labels'],r['Pvalue'], color=color, edgecolor='k', alpha=0.6)

输出:

【讨论】:

以上是关于如何在seaborn barplot中使用NaN值作为具有定义颜色的色调的主要内容,如果未能解决你的问题,请参考以下文章

如何在Seaborn barplot Python中根据名称为单个条着色[重复]

如何将数据标签添加到 seaborn barplot?

如何将 seaborn barplots 绘制为子图?

在 seaborn barplot 中绘制 value_counts()

是否可以在 seaborn.barplot 中为每个单独的条添加阴影?

Seaborn Barplot 上的标签轴