Добавяне на легенда към PyPlot в Matplotlib по възможно най-простия начин
TL;DR -> Как може да се създаде легенда за линейна графика в
Matplotlib
'sPyPlot
, без да се създават допълнителни променливи?
Моля, разгледайте скрипта за графики по-долу:
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
's 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
. Как мога да добавя легенда към графиката си, без да се налага да създавам тази допълнителна променлива и като запазя простотата на сегашния си скрипт.
Добавете
label=
към всяко от вашите извиквания наplot()
и след това извикайтеlegend(loc='upper left')
.Разгледайте този пример (тестван с Python 3.8.0):
Леко модифициран от този урок: http://jakevdp.github.io/mpl_tutorial/tutorial_pages/tut1.html
Ето един пример, който ще ви помогне...
Добавете етикети към всеки аргумент в извикването на плота, съответстващи на сериите, които се изобразяват, т.е.
label = "series 1"
След това просто добавете
Pyplot.legend()
в края на вашия скрипт и легендата ще покаже тези етикети.