如何使用Seaborn修改Violinplot的边缘颜色

时间:2018-04-19 16:39:56

标签: python seaborn

我正试图改变Seaborn中小提琴的边缘颜色。 下面的代码对我有用。

ax=sns.violinplot(data=df, x="#", y="SleepAmount", hue="Thr", palette=my_pal, split=True,linewidth = 1, inner=None)
ax2 = sns.pointplot(x="#", y="SleepAmount", hue="Thr", data=df, dodge=0.3, join=False, palette=['black'], ax=ax,errwidth=1, ci="sd", markers="_") plt.setp(ax.collections, edgecolor="k") 
plt.setp(ax2.collections, edgecolor="k")

但是当我使用facetgrid时,我不知道如何将plt.setp(ax.collections, edgecolor="k")采用到下面的facetgrid地图中。

g = sns.FacetGrid(df, col="temperature",sharey=True)
g=g.map(sns.violinplot,"#", "latency", "Thr", palette=my_pal, split=True, linewidth = 1, inner=None,data=df)
g=g.map(sns.pointplot, "#", "latency", "Thr", data=df, dodge=0.3, join=False, palette=['black'],errwidth=1, ci="sd", markers="_")

我尝试了很多东西。喜欢,

sns.set_edgecolor('k')   
sns.set_style( {"lines.color": "k"})
sns.set_collections({'edgecolor':'k'})
g.fig.get_edgecolor()[0].set_edge("k")
g.setp.get_collections()[0].set_edgecolor("k")

任何人都可以帮助我吗?

一个更快的问题, 除了whitegrid还是darkgrid之外,是否可以更改网格颜色? Facecolor对我不起作用,因为它为所有背景着色,包括刻度和标签区域。我只想改变网格区域。 谢谢!

1 个答案:

答案 0 :(得分:3)

实际上,您已经很接近了(或者说那时还不行)。无论如何,您可以从axis获取FacetGrid对象,然后为collections中的第一个条目设置边缘颜色,例如:

import seaborn as sns


tips = sns.load_dataset('tips')
grid = sns.FacetGrid(tips, col="time", row="smoker") 
grid.map(sns.violinplot, "tip", color='white') 

for ax in grid.axes.flatten():
    ax.collections[0].set_edgecolor('red')

给出enter image description here