以最简单的方式在Matplotlib中向PyPlot添加图例
TL; DR – >如何在
Matplotlib
的PyPlot
创build线图的PyPlot
而不创build任何额外的variables?
请考虑下面的graphics脚本:
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
一个非常基本的PyPlot
。 理想情况下,生成如下所示的graphics:
没什么特别的,我知道。 然而,目前还不清楚哪些数据被绘制在哪里(我试图绘制一些sortingalgorithm的数据,长度与时间的关系,我想确保人们知道哪一行是哪一行)。 因此,我需要一个传说,但是,看看下面的例子( 从官方网站 ):
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)
你会看到我需要创build一个额外的variablesax
。 我怎样才能添加一个图例, 而不必创build这个额外的variables,并保留我当前脚本的简单性。
为每个plot()
调用添加一个label=
,然后调用legend(loc='upper left')
。
考虑这个例子:
import numpy as np import pylab x = np.linspace(0, 20, 1000) y1 = np.sin(x) y2 = np.cos(x) pylab.plot(x, y1, '-b', label='sine') pylab.plot(x, y2, '-r', label='cosine') pylab.legend(loc='upper left') pylab.ylim(-1.5, 2.0) pylab.show()
从本教程略微修改: http : //jakevdp.github.io/mpl_tutorial/tutorial_pages/tut1.html
将标签添加到您的绘图调用中的每个参数,对应于正在绘制的序列,即label = "series 1"
然后简单地将Pyplot.legend()
添加到脚本的底部,图例将显示这些标签。