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

Bst*_*mpe 9 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)
Run Code Online (Sandbox Code Playgroud)

绘制所有点时,群集标签缺少

Python 2.7 Seaborn 0.9.0 Ubuntu 16.04 LTS

Imp*_*est 14

"完整"的传奇

如果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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Categoricals

另一种方法是确保值被分类处理不幸的是,即使您将数字作为字符串插入,它们也会转换为回退到上述相同机制的数字.这可能被视为一个错误.

但是,您有一个选择是使用真实的类别,例如单个字母.

'cluster':list("ABCDE")
Run Code Online (Sandbox Code Playgroud)

工作良好,

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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

字符串与自定义调色板

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

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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述