Προσθήκη ενός μύθου στο 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()

1 Ελαφρώς τροποποιημένο από αυτό το σεμινάριο: 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()

1

Σχόλια (0)

Προσθέστε ετικέτες σε κάθε όρισμα στην κλήση plot που αντιστοιχεί στη σειρά που απεικονίζει, π.χ. label = "series 1"

Στη συνέχεια, προσθέστε απλά την Pyplot.legend() στο τέλος του σεναρίου σας και ο θρύλος θα εμφανίζει αυτές τις ετικέτες.

Σχόλια (1)