我使用seaborn和matplotlib创建了一个箱线图,并通过将showmeans设置为true来添加方法,如下所示:
sns.boxplot(data=df, x="Job", y="Age", order=ylabels, showmeans=True)
然而,手段并没有出现在传说中。我希望它们出现在图例中,这样它们就不仅仅是随机点。
我尝试的第一件事是显而易见的:
plt.legend()
这没有产生任何变化。然后我尝试改变meanprops值,但这并没有改变任何东西。我还使用子图创建了一个单独的可视化,为平均值创建另一个数据集并将其分层。我没有投入大量时间,因为我知道只要进行足够的修补,我就能让它发挥作用。但这不是我的问题,我试图避免这样做。
sns.boxplot()
接受 ax.boxplot()
的大部分参数。这些参数之一是 showmeans=
。另一个是meanprops=
,它是一个改变平均值的属性字典。这些属性之一是 label
。
不幸的是,通过
label
设置 meanprops
会将标签分配给每个方法。如果有 4 个箱线图,平均值将在图例中出现 4 次。您可以通过 ax.get_legend_handles_labels()
获取图例的句柄和标签列表,并且仅使用其中的一部分。如果图例中有其他元素,则需要调整代码。
import matplotlib.pyplot as plt
import seaborn as sns
tips = sns.load_dataset('tips')
sns.set_style('white')
ax = sns.boxplot(data=tips, x='day', y='tip', color='salmon',
showmeans=True, meanprops={'label': 'mean'})
handles, labels = ax.get_legend_handles_labels()
ax.legend(handles[:1], labels[:1])
plt.show()