python - 当省略 x 或 y 参数时,swarmplot 无法识别色调

标签 python pandas matplotlib seaborn

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 群图中。这些点是根据它们的分数绘制的,并且根据分数如何落在 3 条虚线之间,我想对这些点进行不同的着色。我使用 df 的“颜色”列根据与颜色和字典相对应的“分数”值的落点来分配一个键。

colors = {1:'pink', 2:'orange', 3:'red', 4:'green'}

然后,我使用以下代码创建群图,并将颜色字典映射到我的 df 的颜色列。

ax = sns.swarmplot(data=df, y='score', s=10, c=df['color'].map(colors))

当我这样做时,我不会生成任何错误,但不会应用任何颜色,并且这些点保持默认的蓝色(下图左)。 那么,如何根据我的 df['color'] 列为 seaborn 群图中的点分配颜色?

最后一点:当我尝试使用 palette=df['color'].map(colors) 而不是 c=df['color'].map(colors),图表只是将所有内容更改为我的 colors 字典中的最后一种颜色(下图右)

enter image description here enter image description here

编辑:感谢您的建议@Trenton McKinney。它在某种程度上是成功的,因为颜色确实正确映射,但是当我包含 x 的“名称”列(实际上是标题)时,如下所示,我的点被绘制为散点而不是群阴谋。但如果我尝试从参数中删除 x='Title',则会收到错误。

ax = sns.swarmplot(data=data, x='Title', y='score', s=10, hue='color', palette=colors)

enter image description here

最佳答案

  • 根据seaborn issue 941 ,这是预期的行为。
  • 当仅指定 x 或仅指定 y 时,API 似乎无法正常运行。
    • 通过根据数据帧的长度传递相同字符串的列表可以解决此问题:['']*len(df)['text']*len (df)
ax = sns.swarmplot(data=df, x=['']*len(df), y='score', hue='color', palette=colors)

enter image description here

关于python - 当省略 x 或 y 参数时,swarmplot 无法识别色调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70025168/

相关文章:

python - 如何让 django-ldapdb 将数据源识别为 LDAP

python - 如何强制 pandas DataFrame 在构造时使用所需的数据类型?

python - 如何在一个图中为不同的 seaborn kde 图着色?

python - 如何抑制 matplotlib 警告?

python - 如何从列表中选择随机但非最近的 Assets ?

python - 多类分类的概率阈值

Python Pandas Boolean Dataframe,其中 Dataframe 等于 False - 返回 0 而不是 False?

python - 值错误 : scatter requires x column to be numeric

python - 使用 python 的正则表达式检测 2 个连续大写字母的问题

python - 如何将 Scikit-learn 数据集转换为 Pandas 数据集