当省略 x 或 y 参数时,swarmplot 无法识别色调
swarmplot doesn't recognize hue when either the x or y parameter is omitted
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 的 'name' 列(实际上是 Title)时,如下所示,我的点被绘制成散点图而不是群图。但是,如果我尝试从参数中删除 x='Title'
,则会出现错误。
ax = sns.swarmplot(data=data, x='Title', y='score', s=10, hue='color', palette=colors)
- 根据 seaborn issue 941,这是预期的行为。
- 似乎 API 在仅指定
x
或仅指定 y
时效果不佳。
- 通过根据数据帧的长度传递相同字符串的列表来解决此问题:
['']*len(df)
或 ['text']*len(df)
ax = sns.swarmplot(data=df, x=['']*len(df), y='score', hue='color', palette=colors)
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 的 'name' 列(实际上是 Title)时,如下所示,我的点被绘制成散点图而不是群图。但是,如果我尝试从参数中删除 x='Title'
,则会出现错误。
ax = sns.swarmplot(data=data, x='Title', y='score', s=10, hue='color', palette=colors)
- 根据 seaborn issue 941,这是预期的行为。
- 似乎 API 在仅指定
x
或仅指定y
时效果不佳。- 通过根据数据帧的长度传递相同字符串的列表来解决此问题:
['']*len(df)
或['text']*len(df)
- 通过根据数据帧的长度传递相同字符串的列表来解决此问题:
ax = sns.swarmplot(data=df, x=['']*len(df), y='score', hue='color', palette=colors)