如何在Matplotlib
的PyPlot
中创建线图的图例而不创建任何额外的变量?
请考虑下面的图形脚本:
if __name__ == '__main__':
PyPlot.plot(total_lengths, sort_times_bubble, 'b-',
total_lengths, sort_times_ins, 'r-',
total_lengths, sort_times_merge_r, 'g+',
total_lengths, sort_times_merge_i, 'p-', )
PyPlot.title("Combined Statistics")
PyPlot.xlabel("Length of list (number)")
PyPlot.ylabel("Time taken (seconds)")
PyPlot.show()
正如你所看到的,这是matplotlib
的PyPlot
的一个非常基本的用法。这理想地生成了一个像下面这样的图:
没什么特别的,我知道。但是,不清楚什么数据被绘制在哪里(我试图绘制一些排序算法的数据,长度与所花费的时间,我想确保人们知道哪一行是哪一行)。因此,我需要一个图例,然而,看看下面的例子(from the official site):
ax = subplot(1,1,1)
p1, = ax.plot([1,2,3], label="line 1")
p2, = ax.plot([3,2,1], label="line 2")
p3, = ax.plot([2,3,1], label="line 3")
handles, labels = ax.get_legend_handles_labels()
# reverse the order
ax.legend(handles[::-1], labels[::-1])
# or sort them by labels
import operator
hl = sorted(zip(handles, labels),
key=operator.itemgetter(1))
handles2, labels2 = zip(*hl)
ax.legend(handles2, labels2)
你会看到我需要创建一个额外的变量ax
。我怎样才能在不创建这个额外变量的情况下向我的图添加一个图例,并保持我当前脚本的简单性?
6条答案
按热度按时间qeeaahzv1#
将
label=
添加到每个plot()
调用中,然后调用legend(loc='upper left')
。考虑这个示例(用Python 3.8.0测试):
本教程略有修改:http://jakevdp.github.io/mpl_tutorial/tutorial_pages/tut1.html
aemubtdh2#
您可以使用
plt.gca()
访问Axes示例(ax
)。你可以通过在每个
plt.plot()
调用中使用label=
关键字,或者通过在legend
中将标签分配为元组或列表来实现这一点,如下面的工作示例所示:但是,如果需要多次访问Axes示例,我建议将其保存到变量
ax
中,并使用然后调用
ax
而不是plt.gca()
。ckx4rj1h3#
这里有一个例子来帮助你。。
oogrdqng4#
您可以添加自定义图例documentation
voj3qocg5#
一个简单的正弦和余弦曲线图与图例。
已用
matplotlib.pyplot
8ljdwjyq6#
将标签添加到plot调用中的每个参数,这些参数对应于它所绘制的系列,即
label = "series 1"
然后,只需将
Pyplot.legend()
添加到脚本的底部,图例将显示这些标签。