Python 给定数值数据时,Seaborn.relplot()中的'hue'参数跳过整数?

Python 给定数值数据时,Seaborn.relplot()中的'hue'参数跳过整数?,python,pandas,seaborn,Python,Pandas,Seaborn,色调参数跳过一个整数 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“完整”图例 如果色调为数字格式,seaborn将假定它代表某个

色调参数跳过一个整数

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

“完整”图例 如果
色调
为数字格式,seaborn将假定它代表某个连续的数量,并决定沿颜色维度显示它认为具有代表性的样本

您可以通过使用
legend=“full”
绕过此问题

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

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

'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()

如果我错了,请纠正我,但输出是否正确?
3,5
不应该在集群4中吗?我无法发布输出(因为我没有10次重复),图形右侧的“色调”栏仅标记0,1,3,4,并跳过标签2。但是所有的点都是图表化的,不管它们的标签是什么。你现在应该可以发布输出:)我知道这个问题提出已经快两年了,但我认为把这个参考留在这里是很重要的。通过提供legend='full'可以将每个色调绘制为类别而不是数字。这里是seaborn dev的链接:如果这个问题已经提出,您可以查看,如果没有,请打开一个关于它的问题。还有一个选择:使用
palette=[…]
,其中列表包含的颜色与您的类别完全相同。对于两类,<代码> PaleTe=(r)、“b”[/Cl] >给出了红色和蓝色的点。是的,我正在更新这个过程。浪费了半天,我终于找到了这个解决方案…非常感谢。
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()