运行以下代码时,我发现
red
和blue
这两种颜色在绘图中显示得非常奇怪;此外,图例的颜色不匹配:
import matplotlib.pyplot as plt
import seaborn as sns
maxs = [35, 31, 35, 31, 34, 30, 31, 29, 30, 33]
clrs = ['red', 'blue', 'red', 'blue', 'red', 'blue', 'blue', 'blue', 'blue', 'red']
fig, ax = plt.subplots(figsize=(8, 4))
sns.histplot(ax = ax, x = maxs, bins = "auto", discrete = True, shrink = 0.5,
stat = "count", element = "bars", kde = False, hue = clrs)
plt.show()
使用
hue=clrs
,名称不会被解释为颜色,而是被解释为唯一的字符串。巧合的是,默认颜色恰好是蓝色和橙色。 (如果设置 clrs = ['foo', 'bar', ...]
,您将获得相同的颜色)。添加将色调名称映射到相应颜色的调色板字典可以解决该问题。如果所有色调名称都是有效的颜色名称,则palette = {col: col for col in clrs}
可以工作,可以手动设置调色板。
通常不同的色调值可以占据相同的 x 位置,seaborn 应用 alpha 透明度。如果您确定不会重叠,可以将透明度设置为
1
。
当 bins
时,
discrete=True
将被忽略。
import matplotlib.pyplot as plt
import seaborn as sns
maxs = [35, 31, 35, 31, 34, 30, 31, 29, 30, 33]
clrs = ['red', 'blue', 'red', 'blue', 'red', 'blue', 'blue', 'blue', 'blue', 'red']
fig, ax = plt.subplots(figsize=(8, 4))
sns.histplot(ax=ax, x=maxs, discrete=True, shrink=0.5,
stat="count", element="bars", kde=False, hue=clrs,
palette={'red': 'crimson', 'blue': 'dodgerblue'}, alpha=1)
plt.show()