Seaborn小提琴图的透明度

15

我希望在seaborn.violinplot中使用透明度逐渐增加的小提琴图。我尝试了以下方法:

import seaborn as sns

tips = sns.load_dataset("tips")

ax = sns.violinplot(x="day", y="total_bill", data=tips, color='r', alpha=[0.8, 0.6, 0.4, 0.2])

哪一个不会产生预期的输出:

输入图像描述

2个回答

18

在寻找更改小提琴图(alpha值)的通用方法时,发现了这个帖子。看起来你需要从ax中访问matplotlib.PolyCollections,才能设置alpha值,但既然你必须访问它们,那么就可以单独设置alpha值(至少在你想要单独设置alpha值的情况下)。

据我所知,ax.collections包含matplotlib.PolyCollections和matplotlib.PathCollections,你只需要PolyCollections,因此我采取了以下措施,似乎可以解决问题:

ax = sns.violinplot(x = 'day', y = 'total_bill', data = tips, color = 'r')
for violin, alpha in zip(ax.collections[::2], [0.8,0.6,0.4,0.2]):
    violin.set_alpha(alpha)

ax.collections[::2]忽略PathCollections,因为ax.collections的格式为[PolyCollection1,PathCollection1,PolyCollection2,PathCollection2,...]

输出:

输入图像描述


2
由于某些原因,尽管我在tips数据集上尝试这个示例时完美运行,但当应用于我的实际数据时却无法正常工作。我通过调用感兴趣的PolyCollections上的get_facelor方法,更改alpha值,然后应用set_facecolor来解决了这个问题;它神奇地起作用了。 - Aubergine

8

根据同一讨论进行更新。

更简单的回答是:

plt.setp(ax.collections, alpha=.3)


如何根据需要更新图例颜色? - undefined
1
import matplotlib.patches as mpatchespatch = mpatches.Patch(color=(1, 0, 0, 0.3)) ax.legend([patch, ['group1']) - undefined
我能够用以下代码实现这个功能: 对于ax.legend_.legendHandles中的每个h,使用h.set_alpha(0.3)。 - undefined

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