【发布时间】:2022-01-07 21:16:46
【问题描述】:
data = {'name': ['A', 'B', 'C', 'D'],
'score': [-9.5, -8.3, -8.1, -7.0],
'color': [4, 3, 2, 1]}
df = pd.DataFrame(data)
我将数据保存在上面的数据框中,并将其绘制到如下图所示的 seaborn swarmplot 中。这些点是根据它们的分数绘制的,并且根据它在 3 条虚线之间的分布情况,我想对这些点进行不同的着色。我使用 df 的 'color' 列根据与颜色和字典对应的 'score' 值所在的位置分配一个键。
colors = {1:'pink', 2:'orange', 3:'red', 4:'green'}
然后我使用以下代码创建 swarmplot 并将颜色字典映射到我的 df 的颜色列。
ax = sns.swarmplot(data=df, y='score', s=10, c=df['color'].map(colors))
当我这样做时,我不会产生任何错误,但不会应用任何颜色,并且这些点仍然是默认的蓝色(下图,左)。 那么,如何根据我的 df['color'] 列为 seaborn swarmplot 中的点分配颜色?
最后说明:当我尝试使用palette=df['color'].map(colors) 而不是c=df['color'].map(colors) 时,图表只会将所有内容更改为我的colors 字典中的最后一种颜色(下图,右)
编辑:感谢您的建议@Trenton McKinney。在颜色正确映射方面有点成功,但是当我为 x 包含“名称”列(它实际上是 Title)时,如下所示,我的点被绘制成散点图而不是群阴谋。但是,如果我尝试从参数中删除 x='Title',则会收到错误消息。
ax = sns.swarmplot(data=data, x='Title', y='score', s=10, hue='color', palette=colors)
【问题讨论】:
-
ax = sns.swarmplot(data=df, x='name', y='score', hue='color', palette=colors)
标签: python pandas matplotlib seaborn