Seaborn条带图根据色调/调色板设置边缘颜色

4

我正在尝试创建一个类似于 seaborn 文档中的这个图像,但是带有由 hue 决定的 stripplot 边缘颜色。这是我的尝试:

import seaborn as sns
df = sns.load_dataset("tips")
ax = sns.stripplot(x="sex", y="tip", hue="day", data=df, jitter=True,
                   edgecolor=sns.color_palette("hls", 4),
                   facecolors="none", split=False, alpha=0.7)

enter image description here

但男性和女性的配色方案似乎不同。我如何为两个类别使用相同的配色方案?

我正在使用 seaborn 0.6.dev

1个回答

3
边缘颜色参数只是直接传递给plt.scatter。目前,您正在给它提供一个由4种颜色组成的列表。我不确定在这种情况下会发生什么(也不确定为什么您最终看到了这个结果),但我不希望它“起作用”。
使其正常工作的理想方式是使用“空心圆”标记字形,根据color(或facecolor)属性而不是边缘来着色。虽然在核心matplotlib中将其作为选项将很好,但存在一些不一致之处可能会使其无法正常工作。但是,可以通过自定义字形来实现所需效果。
import numpy as np
import matplotlib as mpl
import seaborn as sns

sns.set_style("whitegrid")
df = sns.load_dataset("tips")

pnts = np.linspace(0, np.pi * 2, 24)
circ = np.c_[np.sin(pts) / 2, -np.cos(pts) / 2]
vert = np.r_[circ, circ[::-1] * .7]

open_circle = mpl.path.Path(vert)

sns.stripplot(x="sex", y="tip", hue="day", data=df,
              jitter=True, split=False,
              palette="hls", marker=open_circle, linewidth=0)

enter image description here

值得一提的是,使用这种方法时要小心,因为颜色变得更难区分了。使用hls调色板会加剧这个问题,因为亮绿色和青色中间的颜色变得非常相似。我可以想象出一些情况下这种方法会很好用,例如使用灰色和明亮颜色来表示具有两个级别的色调变量,您想强调后者。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接