I nomi degli oggetti
Matplotlib è fortemente orientato agli oggetti ei suoi oggetti principali sono la figura e gli assi (trovo il nome axesun po 'fuorviante, ma probabilmente sono solo io).
Puoi pensare alla figura come a una tela , di cui in genere specifichi le dimensioni e possibilmente ad es. Il colore di sfondo ecc. Ecc. Usi la tela, la figura , essenzialmente in due modi, posizionando altri oggetti su di essa (principalmente assi , ma anche etichette di testo ecc.) e salvarne il contenuto con savefig.
Si può pensare a un asse come una sorta di coltellino svizzero, un oggetto pratico che offre uno strumento (ad esempio .plot, .scatter, .histecc) per tutto, per lo più. Puoi posizionare uno, due, ... molti assi all'interno di una figura usando uno dei tanti metodi differenti.
L' pltinterfaccia
L' interfaccia procedurale plt è stata originariamente sviluppata per imitare l'interfaccia MATLAB ™ ma non è molto diversa dall'interfaccia orientata agli oggetti, anche se non si fa un riferimento diretto agli oggetti principali (cioè una figura e un asse ) questi oggetti sono istanziata automaticamente e ogni metodo plt viene, essenzialmente, tradotto in una chiamata di uno dei metodi degli oggetti fondamentali sottostanti: ad esempio, a plt.plot()è a hidden_axes.plote a plt.savefigè a hidden_figure.savefig.
In ogni momento puoi avere un handle su questi oggetti nascosti usando plt.gcfe plt.gca, e questo a volte è necessario quando uno dei metodi dell'oggetto non è stato portato su un metodo nello spazio dei nomi plt .
Vorrei aggiungere che lo spazio dei nomi plt contiene anche una serie di metodi convenienti per istanziare, in modi diversi, figure e assi .
I tuoi esempi
1 ° modo
plt.plot(x, y)
Qui usi solo l' interfaccia plt , puoi usare solo un singolo asse in ogni figura , ma questo è quello che vuoi quando stai facendo un'esplorazione dei tuoi dati, una ricetta veloce che porta a termine il lavoro ...
2 ° modo
ax = plt.subplot()
ax.plot(x, y)
Qui usi un metodo comodo nello spazio dei nomi plt per dare un nome (e una maniglia) al tuo oggetto assi , ma a proposito c'è anche una figura nascosta . Successivamente è possibile utilizzare l' oggetto assi per tracciare, creare un istogramma, ecc., Tutto ciò che è possibile fare con l' interfaccia plt , ma è anche possibile accedere a tutti i suoi attributi e modificarli con maggiore libertà.
Terza via
figure = plt.figure()
new_plot = figure.add_subplot(111)
new_plot.plot(x, y)
Qui inizi a creare un'istanza di una figura usando un comodo metodo nello spazio dei nomi plt e in seguito utilizzi solo l'interfaccia orientata agli oggetti.
È possibile bypassare il metodo di convenienza plt ( matplotlib.figure.Figure) ma è necessario modificare la figura per una migliore esperienza interattiva (dopo tutto, è un metodo conveniente ).
Raccomandazioni personali
Suggerisco di nudo plt.plot, plt.scatternel contesto di una sessione interattiva, possibilmente utilizzando IPython con il suo %matplotlibcomando magico, e anche nel contesto di un notebook Jupyter esplorativo.
D'altra parte l'approccio orientato agli oggetti, più alcuni plt
metodi convenienti, è la strada da percorrere
- se hai un problema permanente da risolvere una volta per tutte con una disposizione personalizzata di sottotrame finemente sintonizzate,
- se vuoi incorporare Matplotlib nell'interfaccia utente di un programma che scrivi.
C'è una vasta area grigia tra questi estremi e se mi chiedi cosa fare ti direi semplicemente "Dipende" ...