Добавяне на легенда към PyPlot в Matplotlib по възможно най-простия начин

TL;DR -> Как може да се създаде легенда за линейна графика в Matplotlib's 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'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):

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

Коментари (5)

Ето един пример, който ще ви помогне...

fig = plt.figure(figsize=(10,5))
ax = fig.add_subplot(111)
ax.set_title('ADR vs Rating (CS:GO)')
ax.scatter(x=data[:,0],y=data[:,1],label='Data')
plt.plot(data[:,0], m*data[:,0] + b,color='red',label='Our Fitting 
Line')
ax.set_xlabel('ADR')
ax.set_ylabel('Rating')
ax.legend(loc='best')
plt.show()

Коментари (0)

Добавете етикети към всеки аргумент в извикването на плота, съответстващи на сериите, които се изобразяват, т.е. label = "series 1"

След това просто добавете Pyplot.legend() в края на вашия скрипт и легендата ще покаже тези етикети.

Коментари (1)