Sto usando IPython con –pylab = inline e vorrei a volte passare rapidamente alla GUI Matplotlib intertriggers e zoomabile per visualizzare i grafici (quello che si apre quando si traccia qualcosa in una console Python terminale). Come potrei farlo? Preferibilmente senza lasciare o riavviare il mio notebook.
Il problema con i grafici in linea nel notebook IPy è che hanno una risoluzione limitata e non posso ingrandirli per vedere alcune parti più piccole. Con la GUI Maptlotlib che inizia da un terminale posso selezionare un rettangolo del grafico che voglio ingrandire e gli assi si regolano di conseguenza. Ho provato a sperimentare
from matplotlib import interactive interactive(True)
e
interactive(False)
ma questo non ha fatto nulla Non sono riuscito a trovare nessun suggerimento online.
Secondo la documentazione , dovresti essere in grado di passare avanti e indietro in questo modo:
In [2]: %matplotlib inline In [3]: plot(...) In [4]: %matplotlib qt # wx, gtk, osx, tk, empty uses default In [5]: plot(...)
e questo farà apparire una normale finestra di stampa (potrebbe essere necessario un riavvio sul notebook).
Spero che aiuti.
Se tutto quello che vuoi fare è passare da grafici in linea a quelli interattivi e indietro (in modo da poter eseguire pan / zoom), è meglio usare% matplotlib magic.
#interactive plotting in separate window %matplotlib qt
e ritorno a html
#normal charts inside notebooks %matplotlib inline
% La magia di pylab importa un sacco di altre cose e può anche portare a un conflitto. Lo fa “da pylab import *”.
Puoi anche usare il nuovo backend per notebook (aggiunto in matplotlib 1.4):
#interactive charts inside notebooks, matplotlib 1.4+ %matplotlib notebook
Se vuoi avere più interattività nei tuoi grafici, puoi guardare mpld3 e bokeh . mpld3 è ottimo, se non si hanno tonnellate di punti dati (ad esempio <5k +) e si desidera utilizzare la sintassi matplotlib normale, ma più interattività, rispetto al notebook matplotlib%. Bokeh può gestire molti dati, ma è necessario conoscerne la sintassi poiché è una libreria separata.
Inoltre puoi controllare pivottablejs (pip install pivottablejs)
from pivottablejs import pivot_ui pivot_ui(df)
Tuttavia, l’esplorazione dei dati intertriggers è interessante, ma può compromettere totalmente la riproducibilità. È successo a me, quindi cerco di usarlo solo nella fase iniziale e passare a Matplotlib / Seaborn in linea pura, una volta ottenuto il feeling con i dati.
A partire da matplotlib 1.4.0 c’è ora un backend interattivo da usare nel notebook
%matplotlib notebook
Ci sono alcune versioni di IPython che non hanno quell’alias registrato, il fall back è:
%matplotlib nbagg
Se non funziona, aggiorna IPython.
Per giocare con questo, goto tmpnb.org
e incolla
%matplotlib notebook import pandas as pd import numpy as np import matplotlib from matplotlib import pyplot as plt import seaborn as sns ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000)) ts = ts.cumsum() df = pd.DataFrame(np.random.randn(1000, 4), index=ts.index, columns=['A', 'B', 'C', 'D']) df = df.cumsum() df.plot(); plt.legend(loc='best')
in una cella di codice (o semplicemente modificare il taccuino demo di Python esistente)
Una soluzione migliore per il tuo problema potrebbe essere la libreria Charts . Ti permette di usare l’eccellente libreria javascript di Highcharts per creare trame belle e interattive. Highcharts utilizza il tag svg
HTML in modo che tutti i tuoi grafici siano effettivamente immagini vettoriali.
Alcune caratteristiche:
Disclaimer: sono lo sviluppatore della libreria
Sto usando ipython in “jupyter QTConsole” da Anaconda su http://www.continuum.io/downloads il 28/05/20117.
Ecco un esempio per sfogliare avanti e indietro tra una finestra separata e una modalità di trama inline usando la magia ipython.
>>> import matplotlib.pyplot as plt # data to plot >>> x1 = [x for x in range(20)] # Show in separate window >>> %matplotlib >>> plt.plot(x1) >>> plt.close() # Show in console window >>> %matplotlib inline >>> plt.plot(x1) >>> plt.close() # Show in separate window >>> %matplotlib >>> plt.plot(x1) >>> plt.close() # Show in console window >>> %matplotlib inline >>> plt.plot(x1) >>> plt.close() # Note: the %matplotlib magic above causes: # plt.plot(...) # to implicitly include a: # plt.show() # after the command. # # (Not sure how to turn off this behavior # so that it matches behavior without using %matplotlib magic...) # but its ok for interactive work...
Riavvia il kernel e cancella l’output (se non si inizia con un nuovo notebook), quindi esegui
%matplotlib tk
Per maggiori informazioni vai a Plotting with matplotlib