此问题已在此处有答案:
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
错误。
1条答案
按热度按时间eanckbw91#
pyplot.legend
中的handles
参数需要一个参数列表,所以当我传递violin['cmeans']
时,它试图覆盖它(但它不能)。我通过如下方式调用它来修复它:结果是the expected behavior。