Een legenda toevoegen aan PyPlot in Matplotlib op de eenvoudigst mogelijke manier

TL;DR ->Hoe kan men een legenda maken voor een lijngrafiek in matplotlib‘s PyPlotzonder extra variabelen te creëren ?

Overweeg het onderstaande grafische script:

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()

Zoals je kunt zien, is dit een heel basaal gebruik van matplotlib‘s PyPlot. Dit genereert idealiter een grafiek zoals hieronder:

Niets bijzonders, ik weet het. Het is echter onduidelijk welke gegevens waar worden uitgezet (ik probeer de gegevens van sommige sorteeralgoritmen te plotten, de lengte tegen de tijd die nodig is, en ik wil er zeker van zijn dat mensen weten welke regel welke is). Ik heb dus een legende nodig, maar bekijk het volgende voorbeeld hieronder (van de officiële site):

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)

Je zult zien dat ik een extra variabele axmoet aanmaken. Hoe kan ik een legenda aan mijn grafiek toevoegen zonderdeze extra variabele te hoeven maken en de eenvoud van mijn huidige script te behouden?


Antwoord 1, autoriteit 100%

Voeg een label=toe aan elk van uw plot()aanroepen en vervolgens legend(loc='upper left').

Beschouw dit voorbeeld (getest met 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()


Iets gewijzigd ten opzichte van deze tutorial: http://jakevdp.github.io/mpl_tutorial/tutorial_pages/tut1 .html


Antwoord 2, autoriteit 8%

Je hebt toegang tot de Axes-instantie (ax) met plt.gca(). In dit geval kunt u

plt.gca().legend()

U kunt dit doen door het sleutelwoord label=te gebruiken in elk van uw plt.plot()-aanroepen of door uw labels toe te wijzen als een tuple of lijst binnen legend, zoals in dit werkvoorbeeld:

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-0.75,1,100)
y0 = np.exp(2 + 3*x - 7*x**3)
y1 = 7-4*np.sin(4*x)
plt.plot(x,y0,x,y1)
plt.gca().legend(('y0','y1'))
plt.show()

Als u de Axes-instantie echter meer dan één keer wilt openen, raad ik u aan deze op te slaan in de variabele axmet

ax = plt.gca()

en dan axaanroepen in plaats van plt.gca().


Antwoord 3, autoriteit 3%

Hier is een voorbeeld om u te helpen …

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()


Antwoord 4, autoriteit 2%

Een eenvoudige plot voor sinus- en cosinuscurven met een legende.

Gebruikt matplotlib.pyplot

import math
import matplotlib.pyplot as plt
x=[]
for i in range(-314,314):
    x.append(i/100)
ysin=[math.sin(i) for i in x]
ycos=[math.cos(i) for i in x]
plt.plot(x,ysin,label='sin(x)')  #specify label for the corresponding curve
plt.plot(x,ycos,label='cos(x)')
plt.xticks([-3.14,-1.57,0,1.57,3.14],['-$\pi$','-$\pi$/2',0,'$\pi$/2','$\pi$'])
plt.legend()
plt.show()


Antwoord 5

Voeg labels toe aan elk argument in uw plotaanroep die overeenkomen met de reeks die het grafisch weergeeft, d.w.z. label = "series 1"

Voeg vervolgens eenvoudig Pyplot.legend()toe aan de onderkant van uw script en de legenda zal deze labels weergeven.


Antwoord 6

U kunt een aangepaste legenda toevoegen documentatie

first = [1, 2, 4, 5, 4]
second = [3, 4, 2, 2, 3]
plt.plot(first, 'g--', second, 'r--')
plt.legend(['First List', 'Second List'], loc='upper left')
plt.show()


Antwoord 7

   # Dependencies
    import numpy as np
    import matplotlib.pyplot as plt
    #Set Axes
    # Set x axis to numerical value for month
    x_axis_data = np.arange(1,13,1)
    x_axis_data
    # Average weather temp
    points = [39, 42, 51, 62, 72, 82, 86, 84, 77, 65, 55, 44]
    # Plot the line
    plt.plot(x_axis_data, points)
    plt.show()
    # Convert to Celsius C = (F-32) * 0.56
    points_C = [round((x-32) * 0.56,2) for x in points]
    points_C
    # Plot using Celsius
    plt.plot(x_axis_data, points_C)
    plt.show()
    # Plot both on the same chart
    plt.plot(x_axis_data, points)
    plt.plot(x_axis_data, points_C)
    #Line colors
    plt.plot(x_axis_data, points, "-b", label="F")
    plt.plot(x_axis_data, points_C, "-r", label="C")
    #locate legend
    plt.legend(loc="upper left")
    plt.show()

Other episodes