matplotlib pyplot中的标签平均值,violinplot图例[重复]

hujrc8aj  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(95)

此问题已在此处有答案

Adding a matplotlib legend(6个回答)
matplotlib legend not working correctly with handles(1个答案)
How to add a string as the artist to a legend(2个答案)
4天前关闭。
这篇文章是编辑并提交审查3天前.
我正在创建一个pyplot.violinplot,并希望显示平均值,并在图例中标记它,如下所示:(这是示例数据,我的是不同的)

import numpy as np
from matplotlib import pyplot as plt
plotData = [np.random.normal(loc = i,size = 100) for i in range(0,3)]
plotPos = range(0,3)
plt.violinplot(plotData,plotPos,showmeans=True,showextrema=False,widths=1,bw_method=0.5)
plt.legend(labels=['distribution','mean'])

resulting image
然而,图例引用了两次分布,并且没有标记平均线。我发现,因为有3把小提琴,图例中要标记的前三项是分布,第四项是平均线like so。但是我想跳过两个分布,在图例中只使用一个分布和一条平均线。
我还尝试将图保存到一个变量并引用特定的句柄,根据matplotlib.pyplot.legend documentation,如下所示:

violin = plt.violinplot(plotData,plotPos,showmeans=True,showextrema=False,widths=1,bw_method=0.5)
plt.legend(handles=violin['cmeans'],labels=['mean'])

但它写的是'LineCollection' object is not iterable,所以我不知道在这里怎么用。
我在seaborn.violinplot here中看到了类似的问题,但它也没有回答我的问题。还有使用句柄标记不同行here的指导,但这个问题是不同的,因为我在使用句柄时遇到了'LineCollection' object is not iterable错误。

eanckbw9

eanckbw91#

pyplot.legend中的handles参数需要一个参数列表,所以当我传递violin['cmeans']时,它试图覆盖它(但它不能)。我通过如下方式调用它来修复它:

plt.legend(handles = [violin['cmeans']],labels=['mean'])

结果是the expected behavior

相关问题