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

125

Ich verwende IPython mit --pylab=inlineund möchte manchmal schnell zur interaktiven, zoombaren Matplotlib-Benutzeroberfläche wechseln, um Diagramme anzuzeigen (die angezeigt wird, wenn Sie etwas in einer Terminal-Python-Konsole zeichnen). Wie könnte ich das machen? Am besten ohne mein Notebook zu verlassen oder neu zu starten.

Das Problem mit Inline-Plots in IPy-Notebooks ist, dass sie eine begrenzte Auflösung haben und ich sie nicht vergrößern kann, um einige 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, damit zu experimentieren

from matplotlib import interactive
interactive(True)

und

interactive(False)

aber das hat nichts gebracht. Ich konnte auch online keinen Hinweis finden.

Metakermit
quelle
4
Eine andere mögliche Lösung für Ihr ursprüngliches Problem ist das Aktivieren des Zooms in Ihren Inline-Plots, was jetzt möglich ist, wie ich hier beschrieben habe: stackoverflow.com/a/22949003/145823
yonilevy
3
%matplotlib notebook Werke
Myon

Antworten:

140

Laut Dokumentation sollten Sie in der Lage sein, wie folgt 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 reguläres Plotfenster geöffnet (möglicherweise ist ein Neustart des Notebooks erforderlich).

Ich hoffe das hilft.

Adrian Martin
quelle
2
Es ist %pylab qt. Funktioniert nicht unter OS X. Vielleicht hilft es in Ubuntu.
Metakermit
11
Leider kann man nicht hin und her wechseln. Wenn Sie versuchen zu wechseln, nachdem Sie mit pylab = inline oder pylab = qt begonnen haben, erhalten Sie: Dieser Aufruf von matplotlib.use () hat keine Auswirkung, da das Backend bereits ausgewählt wurde; matplotlib.use () muss aufgerufen werden, bevor pylab, matplotlib.pyplot oder matplotlib.backends zum ersten Mal importiert werden.
Charl Botha
3
Ich habe dies abgelehnt, weil es bei mir nicht funktioniert hat und immer noch nicht funktioniert, aber anscheinend ist dies das Problem von 1927 und es hätte mit Merge 2179 behoben werden sollen . @yarox, wenn Sie Ihre Antwort bearbeiten, um diese Informationen aufzunehmen, mache ich meine Ablehnung rückgängig.
Askewchan
2
funktioniert auch hier unter OSX einwandfrei, mit ipython v1.1.0 und MPL 1.3.0
K.-Michael Aye
1
Funktioniert jetzt für mich (2014-08) mit der aktuellen Version von Python 2.7 unter Win7 x64.
nerdfever.com
65

Wenn Sie nur von Inline-Plots zu interaktiv 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 funktioniert "vom Pylab-Import *".

Sie können auch ein neues Notebook-Backend verwenden (hinzugefügt in matplotlib 1.4):

#interactive charts inside notebooks, matplotlib 1.4+
%matplotlib notebook 

Wenn Sie mehr Interaktivität haben , in Ihren Charts möchten, können Sie betrachten mpld3 und Bokeh . mpld3 ist großartig, wenn Sie nicht viele Datenpunkte haben (z. B. <5k +) und die normale Matplotlib-Syntax verwenden möchten, aber mehr Interaktivität im Vergleich zu% matplotlib-Notebooks. 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, deshalb versuche ich, es erst in einem sehr frühen Stadium zu verwenden und auf reines Inline-Matplotlib / Seaborn umzusteigen, sobald ich das Gefühl für die Daten habe.

volodymyr
quelle
1
Warning: Cannot change to a different GUI toolkit: notebook. Using qt instead.für %matplotlib notebook.
mLstudent33
1
ImportError: Failed to import any qt bindingfür den Befehl qt magic
mLstudent33
31

Ab matplotlib 1.4.0 gibt es jetzt ein interaktives Backend zur Verwendung im Notebook

%matplotlib notebook

Es gibt einige IPython-Versionen, bei denen 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 Codezelle (oder ändern Sie einfach das vorhandene Python-Demo-Notizbuch)

Tacaswell
quelle
6

Eine bessere Lösung für Ihr Problem könnte die Diagrammbibliothek sein . Sie können die hervorragende Highcharts- Javascript-Bibliothek verwenden, um schöne und interaktive Diagramme zu erstellen . Highcharts verwendet das HTML- svgTag, sodass alle Ihre Diagramme tatsächlich Vektorbilder sind.

Einige Eigenschaften:

  • Vektordiagramme, die Sie in den Formaten .png, .jpg und .svg herunterladen können, damit Sie nie auf Auflösungsprobleme stoßen
  • Interaktive Diagramme (Zoomen, Schieben, Bewegen des Mauszeigers über Punkte, ...)
  • Verwendbar in einem IPython-Notebook
  • Erkunden Sie Hunderte von Datenstrukturen gleichzeitig mithilfe der asynchronen Plotfunktionen.

Haftungsausschluss: Ich bin der Entwickler der Bibliothek

arnoutaertgeerts
quelle
Eine ziemlich schöne Bibliothek! Ich werde es auf
jeden Fall
Vielen Dank! Lassen Sie mich wissen, was Sie über Github denken und senden Sie eine Ausgabe, wenn Sie irgendwelche Probleme haben :)
Arnoutaertgeerts
1
Obwohl diese Antwort definitiv relevant ist, würde ich sie nicht unbedingt als "bessere Lösung" bezeichnen. Dies hat höchstwahrscheinlich in der Vergangenheit zu einer Ablehnung geführt.
Volodymyr
1
Abgestimmt, da mir dieser Beitrag nicht sagt, wie ich die Diagrammbibliothek tatsächlich zum Öffnen eines interaktiven Plotfensters verwenden kann.
Robert Hönig
4

Ich verwende ipython in "jupyter QTConsole" von Anaconda unter www.continuum.io/downloads am 28.05.20117.

Hier ist ein Beispiel für das Hin- und Herwechseln zwischen einem separaten Fenster und einem Inline-Plot-Modus mithilfe von Ipython Magic.

>>> 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...
Bill Moore
quelle
1
Wenn ich versuche zu verwenden, %matplotliberhalte ich eine Fehlermeldung, die mitImportError: No module named 'PyQt4'
user3731622
Ich habe genau das gleiche Problem wie user3731622. Was kann getan werden? Dies ist für die meisten Antworten auf dieser Seite
bernando_vialli
@mkheifetz @ user3731622 Möglicherweise müssen Sie das Paket installieren: sudo apt-get install python-pyqt5odersudo apt-get install python-pyqt5
ttb
2

Starten Sie den Kernel neu und löschen Sie die Ausgabe (wenn Sie nicht mit einem neuen Notebook beginnen). Führen Sie dann aus

%matplotlib tk

Weitere Informationen finden Sie unter Plotten mit matplotlib

Marcin Lentner
quelle
0

Sie können verwenden

%matplotlib qt

Wenn Sie den Fehler erhalten haben, ImportError: Failed to import any qt bindinginstallieren Sie PyQt5 als: pip install PyQt5und es funktioniert für mich.

susan097
quelle