Seaborn stripplot 设置边缘颜色基于 hue/palette
Seaborn stripplot set edgecolor based on hue/palette
我正在尝试根据 seaborn 文档创建一个类似于 this one 的图形,但带状图的边缘颜色由色调决定。这是我的尝试:
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)
但是男性和女性的调色板似乎不同。如何为两个类别使用相同的调色板?
我正在使用 seaborn 0。6.dev
edgecolor 参数直接传递给 plt.scatter
。目前你给它一个 4 种颜色的列表。我不确定在那种情况下我会期望它做什么(我也不确定为什么你会得到你在这里看到的结果),但我不会期望它 "work"。
完成这项工作的理想方式是使用 "hollow circle" 标记字形,根据 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)
FWIW 我还应该提一下,使用这种方法时一定要小心,因为颜色变得更难区分。 hls
调色板加剧了这个问题,因为石灰绿和青色中间色最终非常相似。不过,我可以想象这会很好地工作的情况,例如具有两个级别的色调变量,由灰色和明亮的颜色表示,您想要强调后者。
我正在尝试根据 seaborn 文档创建一个类似于 this one 的图形,但带状图的边缘颜色由色调决定。这是我的尝试:
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)
但是男性和女性的调色板似乎不同。如何为两个类别使用相同的调色板?
我正在使用 seaborn 0。6.dev
edgecolor 参数直接传递给 plt.scatter
。目前你给它一个 4 种颜色的列表。我不确定在那种情况下我会期望它做什么(我也不确定为什么你会得到你在这里看到的结果),但我不会期望它 "work"。
完成这项工作的理想方式是使用 "hollow circle" 标记字形,根据 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)
FWIW 我还应该提一下,使用这种方法时一定要小心,因为颜色变得更难区分。 hls
调色板加剧了这个问题,因为石灰绿和青色中间色最终非常相似。不过,我可以想象这会很好地工作的情况,例如具有两个级别的色调变量,由灰色和明亮的颜色表示,您想要强调后者。