TL; DR->如何在不创建任何额外变量
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
。理想情况下,生成如下图所示的图:
我知道没什么特别的。但是,尚不清楚在何处绘制哪些数据(我正在尝试绘制某些排序算法的数据,长度与所用时间的关系,并且我想确保人们知道哪条线是哪条)。因此,我需要一个图例,不过,请看下面的示例(来自官方网站):
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
。如何在图例中添加图例而不必创建此额外变量并保持当前脚本的简单性?
您对创建额外变量的关注令我感到困惑。无论如何,您都必须将这些对象置于幕后。
—
塔卡斯韦尔
@tcaswell好,让我尝试安抚他们。我不想创建额外的变量,因为它增加了整个脚本的复杂性。我正尝试将这些教给一群学生,由于他们
—
Games Brainiac
matplotlib
以前从未使用过,所以我想让事情尽可能简单。另外,如果您看一下Rob的答案,它比网站上显示的示例要简单得多。希望对您有所帮助。
我认为,用状态机界面使得它更难于从长远来看理解,因为这么多的它正在做的“魔法”。另外,惯例是使用
—
tacaswell
import matplotlib.pyplot as plt
而不是PyPlot