如何在 seaborn 中设置色调级别的数量?

How to set amount of hue levels in seaborn?

使用以下代码,我可以使用 seaborn 的散点图绘制数据,并为数据值指定特定颜色。

如何设置本示例中使用的颜色数量? (例如,如果我只想使用两种颜色或超过示例中显示的 6 种颜色)

import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')

print("tips.columns=", tips.columns) # tips.columns= Index(['total_bill', 'tip', 'sex', 'smoker', 'day', 'time', 'size'], dtype='object')


sns.scatterplot(data=tips, x="total_bill", y="tip", hue="total_bill", )

Seaborn的scatterplot有一个legend=关键字,可以是'auto''brief''full'False。如果您想要其他内容,则需要创建自定义图例。

如果您想控制所使用的级别和颜色的确切数量,您可以创建一个包含这些色调级别的附加列。这样,您就可以完全控制级别及其命名。 Pandas pd.cut() 会有所帮助。它接受多个 bin 或边界列表。您可以同时设置名称(默认标签将指示边界为'({start},{end}]')。

这是一个例子:

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

tips = sns.load_dataset('tips')

fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(14, 4))

tips['bill level'] = pd.cut(tips["total_bill"], [0, 30, 1000], labels=["≤ 30", "> 30"])
sns.scatterplot(data=tips, x="total_bill", y="tip", hue="bill level", palette=['turquoise', 'crimson'], ax=ax1)
ax1.set_title('2 levels, 2 colors')

tips['bill level'] = pd.cut(tips["total_bill"], bins=7, labels=[f'level {i}' for i in range(1, 8)])
sns.scatterplot(data=tips, x="total_bill", y="tip", hue="bill level", palette='Set2', ax=ax2)
ax2.set_title('7 levels, 7 colors')

plt.tight_layout()
plt.show()