gpt4 book ai didi

python - pyplot 在图例中组合多个线标签

转载 作者:太空狗 更新时间:2023-10-29 17:39:20 25 4
gpt4 key购买 nike

我有导致绘制多条线的数据,我想在我的图例中为这些线提供一个标签。我认为使用下面的示例可以更好地证明这一点,

a = np.array([[ 3.57,  1.76,  7.42,  6.52],
[ 1.57, 1.2 , 3.02, 6.88],
[ 2.23, 4.86, 5.12, 2.81],
[ 4.48, 1.38, 2.14, 0.86],
[ 6.68, 1.72, 8.56, 3.23]])

plt.plot(a[:,::2].T, a[:, 1::2].T, 'r', label='data_a')

plt.legend(loc='best')

正如您在 Out[23] 中看到的那样,绘图产生了 5 条不同的线。结果图看起来像这样 legend of multiple line plot

有什么方法可以告诉 plot 方法避免使用多个标签?我不想尽可能多地使用自定义图例(您可以在其中同时指定标签和线条形状)。

最佳答案

如果我打算经常做的话,我会亲自做一个小助手函数;

from matplotlib import pyplot
import numpy


a = numpy.array([[ 3.57, 1.76, 7.42, 6.52],
[ 1.57, 1.2 , 3.02, 6.88],
[ 2.23, 4.86, 5.12, 2.81],
[ 4.48, 1.38, 2.14, 0.86],
[ 6.68, 1.72, 8.56, 3.23]])


def plotCollection(ax, xs, ys, *args, **kwargs):

ax.plot(xs,ys, *args, **kwargs)

if "label" in kwargs.keys():

#remove duplicates
handles, labels = pyplot.gca().get_legend_handles_labels()
newLabels, newHandles = [], []
for handle, label in zip(handles, labels):
if label not in newLabels:
newLabels.append(label)
newHandles.append(handle)

pyplot.legend(newHandles, newLabels)

ax = pyplot.subplot(1,1,1)
plotCollection(ax, a[:,::2].T, a[:, 1::2].T, 'r', label='data_a')
plotCollection(ax, a[:,1::2].T, a[:, ::2].T, 'b', label='data_b')
pyplot.show()

从图例的 handleslabels 中删除重复项(比你拥有的)更简单(和 IMO 更清晰)的方法是:

handles, labels = pyplot.gca().get_legend_handles_labels()
newLabels, newHandles = [], []
for handle, label in zip(handles, labels):
if label not in newLabels:
newLabels.append(label)
newHandles.append(handle)
pyplot.legend(newHandles, newLabels)

关于python - pyplot 在图例中组合多个线标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26337493/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com