如何在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 中绘制 value_counts()