python 如何在分组小提琴图中获取轮廓颜色而不是填充颜色

krugob8w  于 2023-02-11  发布在  Python
关注(0)|答案(1)|浏览(215)

我使用seaborn.violinplot()来推导两组之间的差异,代码如下:

import seaborn

seaborn.set(style="whitegrid")

tips = seaborn.load_dataset("tips")

seaborn.violinplot(x="day", y="total_bill", hue="smoker", data=tips, palette="Set2", dodge=True)

但是,我不希望小提琴中的填充颜色,而希望用边缘的颜色来区分这两组,下面是一个示例:

我怎样才能做到这一点?

laik7k3q

laik7k3q1#

你可以循环遍历生成的小提琴并将它们的edgecolor(通常是深灰色)设置为它们的facecolor。
由于seaborn更喜欢将用于区域的饱和色,因此可以在对sns.violinplot的调用中添加saturate=1

import matplotlib.pyplot as plt
import matplotlib
import seaborn as sns

sns.set(style="whitegrid")
tips = sns.load_dataset("tips")
ax = sns.violinplot(x="day", y="total_bill", hue="smoker", data=tips, palette="Set2", dodge=True, saturation=1)
for collection in ax.collections:
    if isinstance(collection, matplotlib.collections.PolyCollection):
        collection.set_edgecolor(collection.get_facecolor())
        collection.set_facecolor('none')
for h in ax.legend_.legendHandles:
    if isinstance(h, matplotlib.patches.Rectangle):
        h.set_edgecolor(h.get_facecolor())
        h.set_facecolor('none')
        h.set_linewidth(1.5)
plt.show()

相关问题