以最简单的方式将图例添加到Matplotlib中的PyPlot


问题内容

TL; DR- >如何在不创建任何额外变量MatplotlibPyPlot情况下为的线形图创建图例?

请考虑以下图形脚本:

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。理想情况下,生成如下图所示的图:

图形

我知道没什么特别的。但是,尚不清楚在何处绘制哪些数据(我正在尝试绘制某些排序算法的数据,长度与所用时间的关系,并且我想确保人们知道哪条线是哪条)。因此,我需要一个图例,不过,请看下面的示例(来自官方网站):

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。如何在图例中添加图例 不必创建此额外变量并保持当前脚本的简单性?


问题答案:

label=在每个plot()呼叫中添加一个,然后呼叫legend(loc='upper left')

考虑以下示例(使用Python 3.8.0测试):

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 20, 1000)
y1 = np.sin(x)
y2 = np.cos(x)

plt.plot(x, y1, "-b", label="sine")
plt.plot(x, y2, "-r", label="cosine")
plt.legend(loc="upper left")
plt.ylim(-1.5, 2.0)
plt.show()

在此处输入图片说明
从本教程中略作修改:http
:
//jakevdp.github.io/mpl_tutorial/tutorial_pages/tut1.html