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

2024-04-21

我正在尝试更改 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")

谁能帮我吗?

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


Quoting seaborn 的 violinplot 文档 https://seaborn.pydata.org/generated/seaborn.violinplot.html#seaborn.violinplot:

线宽:浮动,可选 构成绘图元素的灰线的宽度。

所以它看起来相当硬编码。

事实上,引用Seaborn的绘制小提琴代码 https://github.com/mwaskom/seaborn/blob/master/seaborn/categorical.py:

def draw_violins(self, ax):
    """Draw the violins onto `ax`."""
    fill_func = ax.fill_betweenx if self.orient == "v" else ax.fill_between
    for i, group_data in enumerate(self.plot_data):

        kws = dict(edgecolor=self.gray, linewidth=self.linewidth)

所以我想你不能用seaborn的API轻松做到这一点。或者如果你热衷于黑客/猴子修补 https://stackoverflow.com/questions/5626193/what-is-monkey-patchingSeaborn 的课程...

import seaborn.categorical
seaborn.categorical._Old_Violin = seaborn.categorical._ViolinPlotter

class _My_ViolinPlotter(seaborn.categorical._Old_Violin):

    def __init__(self, *args, **kwargs):
        super(_My_ViolinPlotter, self).__init__(*args, **kwargs)
        self.gray='red'

seaborn.categorical._ViolinPlotter = _My_ViolinPlotter

import seaborn as sns
import matplotlib.pyplot as plt


sns.set(style="ticks", color_codes=True)
tips = sns.load_dataset("tips")
g = sns.FacetGrid(tips, col="time", row="smoker")
g.map(sns.violinplot, "tip")
plt.show()

然而,seaborn 的 FacetGrid 是基于 matplotlib 的子图。一旦准备好绘制图表,也许有一个技巧可以改变它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Seaborn 修改 Violinplot 的边缘颜色 的相关文章

随机推荐