Ich verwende IPython mit --pylab=inline
und möchte manchmal schnell zur interaktiven, zoombaren matplotlib-GUI wechseln, um Diagramme anzuzeigen (die, die angezeigt wird, wenn Sie etwas in einem Terminal zeichnen Python Konsole). Wie könnte ich das tun? Am besten ohne mein Notebook zu verlassen oder neu zu starten.
Das Problem mit Inline-Plots in IPy Notebook ist, dass sie eine begrenzte Auflösung haben und ich sie nicht vergrößern kann, um kleinere Teile zu sehen. Mit der maptlotlib-GUI, die von einem Terminal aus startet, kann ich ein Rechteck des Diagramms auswählen, in das ich zoomen möchte, und die Achsen entsprechend anpassen. Ich habe versucht zu experimentieren
from matplotlib import interactive
interactive(True)
und
interactive(False)
aber das hat nichts gebracht. Ich konnte auch online keinen Hinweis finden.
Laut Dokumentation solltest du in der Lage sein, so hin und her zu wechseln:
In [2]: %matplotlib inline
In [3]: plot(...)
In [4]: %matplotlib qt # wx, gtk, osx, tk, empty uses default
In [5]: plot(...)
daraufhin wird ein normales Plotfenster angezeigt (möglicherweise ist ein Neustart des Notebooks erforderlich).
Ich hoffe das hilft.
Wenn Sie nur von Inline-Plots zu interaktiven und zurück wechseln möchten (damit Sie schwenken/zoomen können), ist es besser,% matplotlib magic zu verwenden.
#interactive plotting in separate window
%matplotlib qt
und zurück zu HTML
#normal charts inside notebooks
%matplotlib inline
% pylab magic importiert eine Reihe anderer Dinge und kann sogar zu Konflikten führen. Es macht "von Pylab Import *".
Sie können auch das neue Notebook-Backend verwenden (hinzugefügt in matplotlib 1.4):
#interactive charts inside notebooks, matplotlib 1.4+
%matplotlib notebook
Wenn Sie mehr Interaktivität in Ihren Diagrammen haben möchten, können Sie sich mpld und bokeh ansehen. mpld3 ist großartig, wenn Sie nicht über jede Menge Datenpunkte (z. B. <5k +) verfügen und die normale matplotlib-Syntax verwenden möchten, aber mehr Interaktivität im Vergleich zu% matplotlib notebook. Bokeh kann mit vielen Daten umgehen, aber Sie müssen die Syntax lernen, da es sich um eine separate Bibliothek handelt.
Sie können auch pivottablejs auschecken (pip install pivottablejs)
from pivottablejs import pivot_ui
pivot_ui(df)
So cool die interaktive Datenexploration auch ist, sie kann die Reproduzierbarkeit völlig beeinträchtigen. Es ist mir passiert, also versuche ich es erst in einem sehr frühen Stadium zu benutzen und zu reiner Inline-Matplotlib/Seaborn zu wechseln, sobald ich das Gefühl für die Daten habe.
Ab matplotlib 1.4.0 gibt es jetzt ein interaktives Backend zur Verwendung im Notebook
%matplotlib notebook
Es gibt einige Versionen von IPython, für die dieser Alias nicht registriert ist. Der Fallback lautet:
%matplotlib nbagg
Wenn das nicht funktioniert, aktualisieren Sie IPython.
Um damit zu spielen, gehe zu tmpnb.org
und einfügen
%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 eine Code-Zelle (oder ändern Sie einfach das vorhandene python Demo-Notizbuch)
Ich verwende ipython in "jupyter QTConsole" von Anaconda unter www.continuum.io/downloads am 28.05.2017.
Hier ist ein Beispiel, wie Sie mit ipython magic zwischen einem separaten Fenster und einem Inline-Plot-Modus hin- und herschalten können.
>>> 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...
Eine bessere Lösung für Ihr Problem könnte die Charts Bibliothek sein. Sie können die ausgezeichnete JavaScript-Bibliothek Highcharts verwenden, um schöne und interaktive Diagramme zu erstellen. In Highcharts wird das HTML-Tag svg
verwendet, sodass alle Ihre Diagramme Vektorgrafiken sind.
Einige Eigenschaften:
Haftungsausschluss: Ich bin der Entwickler der Bibliothek
Starten Sie den Kernel neu und löschen Sie die Ausgabe (falls Sie nicht mit einem neuen Notebook starten). Führen Sie dann aus
%matplotlib tk
Weitere Informationen finden Sie unter Plotten mit matplotlib