给定数值数据时,Seaborn.relplot()中的“ hue”参数会跳过整数吗?

时间:2018-07-25 18:12:57

标签: python pandas seaborn

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)

While all points are plotted, the cluster label is missing '2'.

Python 2.7 Seaborn 0.9.0 Ubuntu 16.04 LTS

1 个答案:

答案 0 :(得分:9)

“完整”图例

如果df1: average name 3.5 n1 1.2 n2 4.2 n3 df2: name n1 n1 n1 n2 n3 n1 n2 n3 n3 df_i_want: average name 3.5 n1 3.5 n1 3.5 n1 1.2 n2 4.2 n3 3.5 n1 1.2 n2 4.2 n3 4.2 n3 为数字格式,seaborn将假定它代表某个连续量,并决定沿颜色维度显示它认为是代表性的样本。

您可以使用hue来规避这一点。

legend="full"

enter image description here

类别

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

不过,您的选择之一就是使用真实类别,例如单个字母。

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

工作正常,

'cluster':list("ABCDE")

enter image description here

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

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

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

enter image description here