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` 参数在给定数值数据时会跳过一个整数?的主要内容,如果未能解决你的问题,请参考以下文章