webentwicklung-frage-antwort-db.com.de

Wie kann ich das interaktive matplotlib-Fenster in IPython Notebook öffnen?

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.

109
metakermit

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.

114
Adrian Martin

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.

53
volodymyr

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)

28
tacaswell

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...
4
Bill Moore

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:

  • Vektordiagramme, die Sie in den Formaten .png, .jpg und .svg herunterladen können, sodass Sie niemals auf Auflösungsprobleme stoßen
  • Interaktive Diagramme (zoomen, schieben, über Punkte fahren, ...)
  • In einem IPython-Notizbuch verwendbar
  • Durchsuchen Sie Hunderte von Datenstrukturen gleichzeitig mithilfe der asynchronen Plotterfunktionen.

Haftungsausschluss: Ich bin der Entwickler der Bibliothek

3

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

2
Marcin Lentner