以最简单的方式在Matplotlib中向PyPlot添加图例

TL; DR – >如何在MatplotlibPyPlot创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() 

正如你所看到的,这是matplotlibPyPlot一个非常基本的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()添加到脚本的底部,图例将显示这些标签。