Matplotlib Widgets PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Γραφικά στοιχεία Matplotlib

Το Matplotlib δεν είναι μόνο για στατικά οικόπεδα. Ενώ τα GUI δημιουργούνται συνήθως με βιβλιοθήκες GUI και πλαίσια όπως PyQt, Tkinter, Kivy και wxPython, και ενώ η Python έχει εξαιρετική ενσωμάτωση με το PyQt, το Tkinter και wxPython – δεν χρειάζεται να χρησιμοποιήσετε κανένα από αυτά για κάποιες βασικές λειτουργίες GUI, μέσω Γραφικά στοιχεία Matplotlib.

Η matplotlib.widgets Η ενότητα έχει πολλές κλάσεις, συμπεριλαμβανομένων των AxesWidget, εκ των οποίων Buttons, CheckButtons, Sliders, TextBoxes, etc προέρχονται. Όλα αυτά δέχονται το Axes προστίθενται ως το ένα και μοναδικό υποχρεωτικό όρισμα του κατασκευαστή και η τοποθέτησή τους πρέπει να οριστεί χειροκίνητα. Κάτι που πρέπει να σημειωθεί είναι ότι το widget είναι οι άξονες, έτσι θα δημιουργήσετε ένα Axes παράδειγμα για κάθε γραφικό στοιχείο.

Ένα άλλο πράγμα που πρέπει να σημειωθεί είναι ότι πρέπει να διατηρείτε αναφορές στα γραφικά στοιχεία Διαφορετικά, μπορεί να συλλέξουν τα σκουπίδια.

Καθένα από αυτά μπορεί επίσης να απενεργοποιηθεί με ρύθμιση active προς την False, σε αυτήν την περίπτωση, δεν θα ανταποκρίνονται σε κανένα συμβάν, όπως να κάνουν κλικ. Τούτου λεχθέντος, μπορούμε να εισάγουμε έναν νέο τύπο διαδραστικότητας στις πλοκές μας, μέσω διαφόρων στοιχείων και στοιχείων GUI.

Σημείωση: Το Matplotlib δεν προορίζεται να χρησιμοποιηθεί για δημιουργία GUI υψηλής ποιότητας, ούτε για συστήματα φιλικά προς το χρήστη. Αυτά τα γραφικά στοιχεία είναι στοιχειώδη, δεν φαίνονται πραγματικά υπέροχα και έχουν περιορισμένη λειτουργικότητα. Προορίζονται ως ένας τρόπος για να δημιουργήσετε πρωτότυπα και να δοκιμάσετε πράγματα, αντί να τα στείλετε πραγματικά.

Εάν έχετε εργαστεί με το PyQt στο παρελθόν – ίσως παρατηρήσετε ότι η γενική σύνταξη και η προσέγγιση για την προσθήκη αυτών των γραφικών στοιχείων, καθώς και τη σύνδεσή τους με τους χειριστές συμβάντων είναι αρκετά οικεία.

Προσθήκη κουμπιών

Ας ξεκινήσουμε με κουμπιά - ο matplotlib.widgets Η ενότητα ορίζει α Button τάξη. Για να συνδεθούμε σε αυτό, καλούμε το on_clicked() συνάρτηση, η οποία εκτελεί τη συνάρτηση που παρέχουμε. Μόλις εντοπιστεί ένα κλικ, η συνάρτηση εκτελείται.

Κατά τη δημιουργία του κουμπιού, εκχωρούμε ένα Axes σε αυτό, που χρησιμοποιείται για τοποθέτηση. Μπορούμε επίσης να περάσουμε σε α label εκείνη τη στιγμή, για να προσθέσετε κάποιο κείμενο και να το σχολιάσετε για έναν χρήστη. ο color και hovercolor Τα ορίσματα ορίζουν το χρώμα του κουμπιού πριν και μετά την τοποθέτηση του ποντικιού από πάνω.

Εφόσον φροντίζουμε για την τοποθέτηση και τον χώρο για όλα τα γραφικά στοιχεία – ας δημιουργήσουμε ένα Figure και Axes, αφήστε ένα διάστημα στο κάτω μέρος για να προσθέσετε ένα κουμπί και σχεδιάστε ένα κενό Σχέδιο Scatter. Στη συνέχεια, θα ορίσουμε ένα EventHandler κλάση, που έχει μια ενιαία μέθοδο add_random(). Η μέθοδος δημιουργεί δύο τυχαίους αριθμούς και σχεδιάζει έναν δείκτη για αυτούς στο Axes έχουμε δημιουργήσει στο παρελθόν και καλεί plt.draw(), το οποίο επανασχεδιάζει το Figure. Κατά την ενημέρωση των οικοπέδων, θα πρέπει πάντα να καλούμε plt.draw() και πάλι για να το ενημερώσω πραγματικά:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Button fig, ax = plt.subplots()
fig.subplots_adjust(bottom=0.2)
plot = ax.scatter([], []) class EventHandler: def add_random(self, event): x = np.random.randint(0, 100) y = np.random.randint(0, 100) ax.scatter(x, y) plt.draw() # Axes for the Button and positioning
# xposition and yposition in percentages, width, height
button_ax = plt.axes([0.7, 0.05, 0.2, 0.07])
# Create Button and assign it to `button_ax` with label
button = Button(button_ax, 'Add Random', color='green', hovercolor='red')
# On a detected click, execute add_random()
button.on_clicked(EventHandler().add_random) plt.show()

Αυτό έχει ως αποτέλεσμα ένα Figure, με ένα άδειο Axes στο εσωτερικό του και ένα κουμπί στην επάνω δεξιά γωνία της οθόνης, από μόνο του Axes:

Matplotlib Widgets PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Και αφού πατήσουμε το κουμπί μερικές δεκάδες φορές, το δικό μας ax θα συμπληρωθεί με τυχαίους δείκτες:

Matplotlib Widgets PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Με πιο πρακτικούς όρους, θα μπορούσαμε να δημιουργήσουμε ένα κύκλος των χαρακτηριστικών που θα απεικονιστούν σε κάθε πάτημα κουμπιού. Αυτό απαιτεί μερικές τροποποιήσεις στο EventHandler, καθώς και ένα άλλο κουμπί για να επιστρέψετε σε αυτόν τον κύκλο.

Ας χρησιμοποιήσουμε το Ποιότητα κόκκινου κρασιού ξανά σύνολο δεδομένων και οπτικοποιήστε πολλά χαρακτηριστικά έναντι του Αλκοόλ χαρακτηριστικό. Δεδομένου ότι δεν μπορούμε να μπούμε στον κόπο να τα σχεδιάσουμε μεμονωμένα γράφοντας τον κώδικα για να σχεδιάσουμε ένα χαρακτηριστικό έναντι του άλλου και, στη συνέχεια, να τροποποιήσουμε αυτόν τον κώδικα για να σχεδιάσουμε ένα άλλο χαρακτηριστικό έναντι του άλλου.

Η δημιουργία ενός Scatter Matrix μπορεί να μας βοηθήσει εδώ, αλλά αν το σύνολο δεδομένων έχει πολλές δυνατότητες, θα είναι αρκετά δυσανάγνωστο και δεν θα φτάσουμε μακριά. Αν θέλετε να έχετε και οι δύο οικόπεδα μεγάλης κλίμακας που μπορείτε εύκολα να δείτε και να ερμηνεύσετε, επίσης καθώς έχετε πολλαπλές λειτουργίες που τρέχουν χωρίς επιπλέον προσπάθεια – μπορείτε να αυτοματοποιήσετε αυτή τη διαδικασία με κουμπιά:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.widgets import Button fig, ax = plt.subplots()
fig.subplots_adjust(bottom=0.2) df = pd.read_csv('winequality-red.csv')
plot = ax.scatter([], []) class EventHandler: i = 0 # Find and plot next feature, re-draw the Axes def next_feature(self, event): # If the counter is at the end of the columns # Revert it back to 0 to cycle through again if self.i >= len(df.columns): self.i = 0 # Clear Axes from last plot ax.cla() # Plot a feature against a feature located on the `i` column ax.scatter(df['alcohol'], df.iloc[:,self.i]) # Set labels ax.set_xlabel('Alcohol') ax.set_ylabel(df.columns[self.i]) # Increment i self.i += 1 # Update Figure plt.draw() def previous_feature(self, event): # If the counter is at the start of the columns # Revert it back to the last column to cycle through if self.i <= 0: self.i = len(df.columns)-1 ax.cla() ax.scatter(df['alcohol'], df.iloc[:,self.i]) ax.set_xlabel('Alcohol') ax.set_ylabel(df.columns[self.i]) self.i -= 1 plt.draw() # Add buttons
button1_ax = plt.axes([0.7, 0.02, 0.2, 0.07])
next_button = Button(button1_ax, 'Next Feature')
next_button.on_clicked(EventHandler().next_feature) button2_ax = plt.axes([0.45, 0.02, 0.2, 0.07])
previous_button = Button(button2_ax, 'Previous Feature')
previous_button.on_clicked(EventHandler().previous_feature) plt.show()

Η EventHandler η τάξη έχει τώρα δύο μεθόδους - next_feature() και previous_feature(). Και τα δύο αυτά ελέγχουν αν ο μετρητής i έχει φτάσει στο τέλος ή στην αρχή της λίστας στηλών – και για να αποφύγετε ένα IndexError, επαναφέρουμε τον δείκτη στην αντίθετη τιμή και προσομοιώνουμε το α κύκλος. Πηγαίνοντας παρακάτω 0 θα μας επιστρέψει στο τέλος της λίστας στηλών και πηγαίνοντας πάνω από την τελευταία στήλη θα επιστρέψουμε στην πρώτη.

Αφού εξακριβώσουμε πού βρισκόμαστε - εμείς καθαρίστε το Axes, αφού θα σχεδιάζαμε ξανά πάνω από ένα υπάρχον οικόπεδο χωρίς να το καθαρίσουμε μέσω cla() (clαυτί aξες). Εναλλακτικά, θα μπορούσατε να συσσωρεύσετε και σχέσεις χαρακτηριστικών, σχεδιάζοντας το ένα πάνω στο άλλο και χρησιμοποιώντας το cla() δήλωση κατά την επαναφορά του δείκτη στο τέλος/έναρξη του κύκλου.

Μετά την εκκαθάριση του Axes – έχουμε έναν καθαρισμένο καμβά για να ζωγραφίσουμε με τον ax.scatter() λειτουργία. Σε αυτό το παράδειγμα, το σταθερό χαρακτηριστικό είναι Αλκοόλ, άρα είναι παρούσα ανά πάσα στιγμή. Το άλλο χαρακτηριστικό ποικίλλει και είναι προσβάσιμο μέσω iloc[], περνώντας στο ευρετήριο της στήλης. Αυτό επιστρέφει α Series που μπορούμε να χρησιμοποιήσουμε σε αυτή την πλοκή. Παρομοίως, μπορούμε να έχουμε πρόσβαση ονόματα στηλών μέσω του ευρετηρίου τους επίσης – df.columns[index], το οποίο χρησιμοποιείται για τον ορισμό της ετικέτας του άξονα Υ.

Τέλος, αυξάνουμε/μειώνουμε τον μετρητή και καλούμε plt.draw() για να ενημερώσετε το Figure:

Matplotlib Widgets PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Μόλις κάνουμε κλικ στο Επόμενο χαρακτηριστικό Το επόμενο χαρακτηριστικό στη λίστα των στηλών θα απεικονιστεί με βάση Αλκοόλ, και το Figure θα ενημερωθούν κατάλληλα – οι ετικέτες, οι δείκτες και η κλίμακα. Το ίδιο ισχύει και αντίστροφα - Προηγούμενο χαρακτηριστικό θα διασχίσει τη λίστα προς την αντίθετη κατεύθυνση, επιτρέποντάς μας να κάνουμε ποδήλατο εμπρός και πίσω, με έναν μηχανισμό ασφαλείας που επαναφέρει τον μετρητή μας κάθε φορά που φτάνουμε στο τέλος ή στην αρχή του κύκλου.

Προσθήκη κουμπιών ραδιοφώνου και πλαισίων ελέγχου

Κουμπιά ραδιοφώνου χρησιμοποιούνται για να επιτρέπουν σε έναν χρήστη να επιλέξει μια τιμή εκτός αρκετές αξίες. Μόνο ένα κουμπί επιλογής μπορεί να επιλεγεί κάθε φορά και συνήθως αντιπροσωπεύουν μια επιλογή. Πλαίσια ελέγχου μπορεί να χρησιμοποιηθεί εάν θέλετε να επιτρέψετε στον χρήστη να επιλέξει πολλές επιλογές ταυτόχρονα.

Σημείωση: Υπάρχει πολύ περιορισμένη δυνατότητα ελέγχου εάν υπάρχει πλαίσιο ελέγχου on or off. Στην πραγματικότητα, δεν υπάρχει κανένα από το κουτί. Μπορείτε να ελέγξετε μόνο αν το πλαίσιο είναι πιέζεται or δεν, το οποίο θέτει σοβαρό περιορισμό στο πώς μπορεί να χρησιμοποιηθεί, καθώς δεν έχουμε ιδέα σε ποια κατάσταση βρισκόταν πριν από αυτό. Η μόνη εναλλακτική είναι να διατηρήσετε τον δικό σας μετρητή/έλεγχο ως προς την τρέχουσα κατάσταση του κουτιού με ένα boolean και να αλλάξετε τη λογική με βάση αυτό.

Αυτό θα σας επιτρέψει, για παράδειγμα, να προσθέσετε ένα πλαίσιο ελέγχου για το καθένα επιχείρημα προσαρμογής ενός συγκεκριμένου σχεδίου, επιτρέποντας στον χρήστη να τα ορίσει True or False (επιλεγμένο ή μη) ή οποιαδήποτε άλλη μη αντικρουόμενη χαρτογράφηση που βασίζεται σε αυτές τις καταστάσεις.

Ωστόσο, δεδομένου ότι το API είναι περιορισμένο από μόνο του, θα περιοριστούμε και στην προβλεπόμενη χρήση - ενεργοποιώντας και απενεργοποιώντας τα πράγματα. Θα έχουμε δύο χαρακτηριστικά, τα οποία μπορούμε να μετατρέψουμε on και off μέσω ενός πλαισίου ελέγχου. Σημειώστε ότι ακόμη και αυτή η λειτουργία περιορίζεται σε αντικείμενα για τα οποία μπορείτε να ελέγξετε αν είναι ορατά ή όχι.

Από την άλλη πλευρά, δεν θέλουμε να επιτρέψουμε στον χρήστη να εφαρμόσει δύο κλίμακες ταυτόχρονα ή να ορίσει δύο όρια X ταυτόχρονα, αφού θα εφαρμοστεί μόνο η δήλωση που ονομάζεται δεύτερη στην ακολουθία. Για αυτά – θα χρησιμοποιούσαμε κουμπιά ραδιοφώνου.

Ας προσθέσουμε μερικά κουμπιά ραδιοφώνου για να επιτρέψουμε στον χρήστη να επιλέξει το εύρος αξόνων μέσω δύο κουμπιών ραδιοφώνου, αλλά και να του επιτρέψει να μετατρέψει οπτικοποιήσεις χαρακτηριστικών on και off:

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.widgets import CheckButtons
from matplotlib.widgets import RadioButtons fig, ax = plt.subplots()
fig.subplots_adjust(bottom=0.2) df = pd.read_csv('winequality-red.csv') # Plot two line plots for two features, and turn them invisible
line1, = ax.plot(df['fixed acidity'], visible=False)
line2, = ax.plot(df['citric acid'], visible=False) class EventHandler: # set_range handler def set_range(label): if (label == 'Small Range'): ax.set_xlim(0, 1600) ax.set_ylim(0, 25) else: ax.set_xlim(0, 1600) ax.set_ylim(0, 50) plt.draw() # Turn off, if on, and on if off def apply_features(label): if (label == 'Fixed Acidity'): line1.set_visible(not line1.get_visible()) elif (label == 'Citric Acid'): line2.set_visible(not line2.get_visible()) plt.draw() # Add radio buttons and checkboxes
ranges_ax = plt.axes([0.7, 0.02, 0.2, 0.1])
range_radio_buttons = RadioButtons(ranges_ax, ('Small Range', 'Large Range'))
range_radio_buttons.on_clicked(EventHandler.set_range) checkboxes_ax = plt.axes([0.4, 0.02, 0.25, 0.1])
checkboxes = CheckButtons(checkboxes_ax, ('Fixed Acidity', 'Citric Acid'))
checkboxes.on_clicked(EventHandler.apply_features) plt.show()

Και πάλι, έχουμε δύο μεθόδους στο EventHandler() τάξη - set_range() και apply_features(). ο set_range() Η μέθοδος ορίζει το εύρος είτε σε "μικρό" ή "μεγάλο", προσαρμόζοντας το AxesΌρια Χ και Υ. ο apply_features() η λειτουργία αλλάζει το visible πεδίο των Γραμμικών Οικόπεδων που φτιάξαμε νωρίτερα, με βάση το τρέχον τους visible κατάσταση. Αν visible == True, απενεργοποιούμε το Line Plot και αντίστροφα.

Πρέπει να βασιστούμε στην ενσωματωμένη δυνατότητα ελέγχου της ορατότητας των Line Plots, καθώς δεν μπορούμε να ελέγξουμε αν το πλαίσιο ελέγχου ήταν επιλεγμένο ή όχι πριν. Αυτή η ίδια ικανότητα μπορεί να εξομοιωθεί με α status boolean στο πεδίο εφαρμογής του EventHandler() τάξη, η οποία έχει οριστεί σε True και False σε κάθε κλικ, για τύπους γραφικής παράστασης που δεν υποστηρίζουν τον έλεγχο εάν είναι ορατοί εκτός πλαισίου.

Η εκτέλεση αυτού του κώδικα έχει ως αποτέλεσμα α Figure με δύο σετ κουμπιά στο κάτω μέρος. Εάν επιλέξουμε και τα δύο πλαίσια ελέγχου, θα εμφανιστούν και τα δύο Γραμμικά Σχέδια:

Matplotlib Widgets PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Μπορούμε να τα απενεργοποιήσουμε μεμονωμένα:

Matplotlib Widgets PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Και μπορούμε να αλλάξουμε το εύρος του Axes μέσω των κουμπιών ραδιοφώνου:

Matplotlib Widgets PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Προσθήκη πλαισίων κειμένου

Πλαίσια κειμένου χρησιμοποιούνται για συλλέγουν δεδομένα από τον χρήστη – και μπορούμε να αλλάξουμε τα διαγράμματα με βάση αυτά τα δεδομένα. Για παράδειγμα, μπορούμε να ζητήσουμε από έναν χρήστη να εισαγάγει το όνομα ενός χαρακτηριστικού ή να εισαγάγει μια συνάρτηση για την οπτικοποίηση του σχεδίου μας. Φυσικά, η εργασία με τα στοιχεία των χρηστών μπορεί να είναι δύσκολη – υπάρχουν πάντα ακραίες θήκες που πρέπει να προσέξετε.

Ας γράψουμε ένα σενάριο που επιτρέπει στον χρήστη να εισάγει a όνομα χαρακτηριστικού ενός συνόλου δεδομένων και το Axes ενημερώσεις για κάθε υποβολή για να αντικατοπτρίζουν τα δεδομένα. Για τη διευκόλυνση του χρήστη, θα τον ενημερώσουμε εάν η εισαγωγή δεν μπορούσε να αντιστοιχιστεί με ένα όνομα στήλης:

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.widgets import TextBox fig, ax = plt.subplots()
fig.subplots_adjust(bottom=0.2) df = pd.read_csv('winequality-red.csv') class EventHandler: def submit(feature_name): if feature_name != "" or feature_name != None: if feature_name in df: ax.cla() ax.plot(df[feature_name]) else: if len(textbox_ax.texts) > 2: del textbox_ax.texts[-1] textbox_ax.text(-2, 0.4, feature_name + ' was not found.') plt.draw() textbox_ax = plt.axes([0.7, 0.02, 0.2, 0.1])
textbox = TextBox(textbox_ax, 'Feature Name')
textbox.on_submit(EventHandler.submit) plt.show()

Έχουμε έναν απλό έλεγχο για να δούμε αν παρέχεται feature_name είναι κενό ή None, σε αυτή την περίπτωση, δεν κάνουμε τίποτα. Εάν όχι, ελέγχουμε αν το feature_name είναι παρούσα στο DataFrame, επισυνάπτοντας ένα μήνυμα ότι η δυνατότητα δεν βρέθηκε αν δεν υπάρχει. Ωστόσο, πριν επισυνάψουμε το κείμενο, πρέπει να βεβαιωθούμε ότι το προηγούμενο μήνυμα έχει αφαιρεθεί, ώστε να μην επικαλύπτεται το νέο με αυτό. ο axes.texts ιδιοκτησία είναι μια λίστα με όλα τα Text περιπτώσεις σε ένα Axes. Δεδομένου ότι η Axes έχει ήδη ένα Text για παράδειγμα, που ανήκει στη δική μας TextBox, δεν θέλουμε να αφαιρέσουμε τίποτα εάν υπάρχουν 2 ή λιγότερα Text παρούσες περιπτώσεις – το μήνυμα σφάλματος και το TextBox επιγραφή.

Εάν είναι πάνω από δύο, έχουμε ήδη ένα μήνυμα σφάλματος, το οποίο πρέπει να καταργηθεί.

Εάν το χαρακτηριστικό is Παρόντες στο DataFrame, όμως, καθαρίζουμε το Axes και σχεδιάστε το:

Matplotlib Widgets PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Matplotlib Widgets PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Matplotlib Widgets PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Προσθήκη επιλογέων διαστήματος

Επιλογείς ανοιγμάτων μπορεί να χρησιμοποιηθεί για να επιτρέψει στον χρήστη να επιλέξει ένα εύρος δεδομένων και να εστιάσει σε αυτό, θέτοντας τα όρια αξόνων με βάση αυτή την επιλογή. Από προεπιλογή, πολλές βιβλιοθήκες υποστηρίζουν αυτήν τη λειτουργία, αν και δυστυχώς, το Matplotlib δεν το υποστηρίζει και θα πρέπει να το κάνουμε με μη αυτόματο τρόπο. Επιπλέον, θα πρέπει να προσθέσουμε ένα επιπλέον "Επαναφορά" κουμπί αν θέλουμε Σμίκρυνση επίσης.

Για να προσθέσετε ένα Επιλογέας ανοιγμάτων, δεν χρειάζεται να αφιερώσουμε ένα εντελώς νέο Axes για αυτό – μπορούμε να το συνδέσουμε σε ένα υπάρχον, κάτι που είναι πολύ λογικό. Κατά τη δημιουργία ενός SpanSelector, προμηθεύουμε το Axes ανήκει, καθώς και ο χειριστής συμβάντων, ακολουθούμενος από 'horizontal' or 'vertical', που περιστρέφει το Axes και Επιλογέας ανοιγμάτων και τα δύο.

Η useblit Το όρισμα συνήθως ορίζεται σε True επειδή βελτιώνει την απόδοση στα περισσότερα backend. Επιπλέον, προσθέσαμε μερικές ιδιότητες στυλ, όπως η ρύθμιση του alpha του ορθογωνίου που δημιουργήθηκε ως Επιλογέας Span για να 0.5 και την facecolor σε ένα ωραίο tab:blue:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.widgets import SpanSelector
from matplotlib.widgets import Button fig, ax = plt.subplots()
fig.subplots_adjust(bottom=0.2) df = pd.read_csv('AmesHousing.csv') ax.scatter(x = df['Year Built'], y = df['Total Bsmt SF'], alpha = 0.6) class EventHandler: def select_horizontal(x, y): ax.set_xlim(x, y) plt.draw() def reset(self): ax.set_xlim(df['Year Built'].min(), df['Year Built'].max()) plt.draw span_horizontal = SpanSelector(ax, EventHandler.select_horizontal, 'horizontal', useblit=True, rectprops=dict(alpha=0.5, facecolor='tab:blue')) button_ax = plt.axes([0.7, 0.02, 0.2, 0.07])
button = Button(button_ax, 'Reset')
button.on_clicked(EventHandler.reset) plt.show()

Εκτελώντας αυτό δημιουργείται μια γραφική παράσταση στην οποία μπορούμε να επιλέξουμε διαστήματα και να τα μεγεθύνουμε ορίζοντας τα όρια αξόνων στις παρεχόμενες τιμές:

Matplotlib Widgets PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Matplotlib Widgets PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Matplotlib Widgets PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Προσθήκη ρυθμιστικών

Sliders επιτρέπουν στους χρήστες να επιλέγουν μεταξύ πολλών τιμών διαισθητικά σύροντας έναν δείκτη και επιλέγοντας μια τιμή. Συνήθως, τα ρυθμιστικά χρησιμοποιούνται για τη συνεχή ενημέρωση κάποιας τιμής σε μια γραφική παράσταση, όπως το εύρος της or ακόμη και ένα χαρακτηριστικό. Για παράδειγμα, μπορείτε να προσαρμόσετε την τιμή μιας σταθεράς μέσω ενός ρυθμιστικού, το οποίο με τη σειρά του επηρεάζει μια συνάρτηση που βασίζεται σε αυτήν τη σταθερά.

Ας γράψουμε ένα σενάριο που μας επιτρέπει να αλλάξουμε τα όρια του άξονα Υ και Χ, μέσω ενός ρυθμιστικού, το οποίο θα μας επιτρέψει να αλλάξουμε την οπτική γωνία από την οποία βλέπουμε τα δεδομένα μας:

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider fig, ax = plt.subplots()
fig.subplots_adjust(bottom=0.2, left=0.2) df = pd.read_csv('winequality-red.csv')
plot, = ax.plot(df['volatile acidity']) class EventHandler: def update(val): ax.set_ylim(0, yslider.val) ax.set_xlim(0, xslider.val) plt.draw() xslider_ax = plt.axes([0.35, 0.03, 0.5, 0.07])
xslider = Slider( ax=xslider_ax, label="X-limit", valmin=0, valmax=len(df['volatile acidity']), valinit=len(df['volatile acidity']), orientation="horizontal"
) yslider_ax = plt.axes([0.03, 0.2, 0.07, 0.5])
yslider = Slider( ax=yslider_ax, label="Y-limit", valmin=0, valmax=3, valinit=1.5, orientation="vertical"
) xslider.on_changed(EventHandler.update)
yslider.on_changed(EventHandler.update) plt.show()

Έχουμε προσαρμόσει το padding ώστε να υπάρχει ένα ρυθμιστικό στα αριστερά και στο κάτω μέρος του Axes, και σχεδίασαν ένα απλό Γραμμικό Οικόπεδο. Η προσθήκη ενός ρυθμιστικού απαιτεί να δημιουργήσουμε ένα Axes για αυτό, όπως και με τα περισσότερα άλλα γραφικά στοιχεία, και αντιστοιχίστε το στο ax επιχείρημα του Slider μέσω του κατασκευαστή. Επιπλέον, μπορούμε να ορίσουμε τις ελάχιστες, μέγιστες και αρχικές τιμές του ρυθμιστικού. Αυτά θα είναι συνήθως δυναμικά εύρη, με βάση τα δεδομένα που σχεδιάζετε, αλλά μπορούν επίσης να οριστούν μη αυτόματα βαθμωτές τιμές.

Τέλος, SliderΤα s μπορούν να προσανατολιστούν οριζόντια ή κάθετα. Δεδομένου ότι πρόκειται να ενημερώνονται συνεχώς μέσω ενός ποντικιού – το on_changed() Η συνάρτηση χρησιμοποιείται για την ενεργοποίηση μιας απόκρισης όταν ένας χρήστης δίνει στοιχεία. Έχουμε τροποποιήσει το EventHandler τάξη με ένα update() συνάρτηση που απλώς προσαρμόζει τις τιμές των ορίων X και Y με βάση το value των αντίστοιχων ρυθμιστικών.

Η εκτέλεση αυτού του κώδικα θα δημιουργήσει μια γραφική παράσταση με δύο ρυθμιστικά, τα οποία μπορούμε να χρησιμοποιήσουμε για να αλλάξουμε το εύρος του Axes:

Matplotlib Widgets PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Matplotlib Widgets PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Matplotlib Widgets PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Σφραγίδα ώρας:

Περισσότερα από Stackabuse