Seaborn.relplot() 中的 `hue` 参数在给定数值数据时会跳过一个整数?

Posted

技术标签:

【中文标题】Seaborn.relplot() 中的 `hue` 参数在给定数值数据时会跳过一个整数?【英文标题】:The `hue` parameter in Seaborn.relplot() skips an integer when given numerical data? 【发布时间】:2019-01-02 15:35:56 【问题描述】:

hue参数跳过一个整数。

d = 'column1':[1,2,3,4,5], 'column2':[2,4,5,2,3], 'cluster':[0,1,2,3,4]

df = pd.DataFrame(data=d)

sns.relplot(x='column2', y='column1', hue='cluster', data=df)

Python 2.7 Seaborn 0.9.0 Ubuntu 16.04 LTS

【问题讨论】:

如果我错了,请纠正我,但输出不正确吗? 3, 5 不应该在集群 4 中吗? 我无法发布输出(因为我没有 10 个代表),图表右侧的“色调”栏仅标记 0、1、3、4 并跳过标签2. 但是无论标签如何,所有的点都会被绘制出来。 你现在应该可以发布输出了 :) 我知道这个问题被问到已经快两年了,但我认为把这个参考留在这里很重要。通过提供,legend='full' 您可以将每个色调绘制为类别而不是数字。这是 seaborn 开发者的链接:github.com/mwaskom/seaborn/issues/1653 【参考方案1】:

“完整”图例

如果hue 是数字格式,seaborn 将假定它代表一些连续的数量,并决定沿颜色维度显示它认为具有代表性的样本。

您可以使用legend="full" 来规避此问题。

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd

df = pd.DataFrame('column1':[1,2,3,4,5], 'column2':[2,4,5,2,3], 'cluster':[0,1,2,3,4])
sns.relplot(x='column2', y='column1', hue='cluster', data=df, legend="full")
plt.show()

分类

另一种方法是确保对值进行分类处理 不幸的是,即使您将数字作为字符串插入,它们也会被转换为返回到上述相同机制的数字。这可以看到as a bug。

但是,您可以选择使用真实的类别,例如单个字母。

'cluster':list("ABCDE")

工作正常,

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd

d = 'column1':[1,2,3,4,5], 'column2':[2,4,5,2,3], 'cluster':list("ABCDE")

df = pd.DataFrame(data=d)

sns.relplot(x='column2', y='column1', hue='cluster', data=df)

plt.show()

带有自定义调色板的字符串

上述方法的替代方法是使用转换为字符串的数字,然后确保使用具有与独特色调一样多的颜色的自定义调色板。

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd

d = 'column1':[1,2,3,4,5], 'column2':[2,4,5,2,3], 'cluster':[1,2,3,4,5]

df = pd.DataFrame(data=d)
df["cluster"] = df["cluster"].astype(str)

sns.relplot(x='column2', y='column1', hue='cluster', data=df, 
            palette=["b", "g", "r", "indigo", "k"])

plt.show()

【讨论】:

如果这个问题已经被提出,你可以查看seaborn issue tracker,如果没有,请打开一个关于它的问题。 还有另一种选择:使用palette=[ ... ],其中列表包含与您的类别一样多的颜色。比如说,对于两个类别,palette = ["r", "b"] 给你红分和蓝分。 是的,我正在更新这个。 折腾了半天,终于找到了这个解决方案……谢谢!

以上是关于Seaborn.relplot() 中的 `hue` 参数在给定数值数据时会跳过一个整数?的主要内容,如果未能解决你的问题,请参考以下文章

使用 HUE 中的 JAR

Hue UI 中的黑斑羚时间

Plotly 中的 Seaborn HUE

总结HUE集成Sentry,通过HUE界面管理Sentry权限

HUE中集成Solr

如何使用 HUE 在 Impala 查询中设置变量?