2013-01-10 3 views
87

Ich verwende IPython mit --pylab = inline und möchte manchmal schnell zur interaktiven, zoombaren Matplotlib-GUI wechseln, um Plots anzusehen (die, wenn man etwas in einer Terminal-Python-Konsole plottet). Wie könnte ich das tun? Am liebsten ohne mein Notebook zu verlassen oder neu zu starten.Wie kann ich das interaktive Matplotlib-Fenster im IPython-Notizbuch öffnen?

Das Problem mit Inline-Plots in IPy-Notebook ist, dass sie eine begrenzte Auflösung haben und ich kann nicht hineinzoomen, um einige kleinere Teile zu sehen. Mit der grafischen Benutzeroberfläche von Maptlotlib, die von einem Terminal startet, kann ich ein Rechteck des Graphen auswählen, in das ich hineinzoomen möchte, und die Achsen werden entsprechend angepasst. Ich habe versucht, mit

from matplotlib import interactive 
interactive(True) 

und

interactive(False) 

experimentiert, aber das hat nichts zu tun. Ich konnte auch keinen Hinweis online finden.

+4

Eine andere mögliche Lösung zu Ihrem ursprünglichen Problem wird ermöglicht, in Ihrer Inline-Plots Zoomen, die jetzt möglich ist, wie ich hier beschrieben habe: http://stackoverflow.com/a/22949003/145823 – yonilevy

+1

'% matplotlib Notebook 'funktioniert – muon

Antwort

83

Nach den documentation, sollten Sie in der Lage sein, hin und her wie folgt wechseln:

In [2]: %matplotlib inline 
In [3]: plot(...) 

In [4]: %matplotlib qt # wx, gtk, osx, tk, empty uses default 
In [5]: plot(...) 

und das wird ein reguläres Plotfenster (einen Neustart des Notebooks kann notwendig sein) auftauchen.

Ich hoffe, das hilft.

+2

Es ist'% pylab qt'. Funktioniert nicht in OS X. Vielleicht wird es in Ubuntu helfen. – metakermit

+10

Leider können Sie nicht hin und her schalten. Wenn Sie versuchen, nach dem Start mit pylab = inline oder pylab = qt zu wechseln, erhalten Sie: Dieser Aufruf von matplotlib.use() hat keine Auswirkungen, weil das Backend bereits ausgewählt wurde; matplotlib.use() muss * aufgerufen werden, bevor * pylab, matplotlib.pyplot oder matplotlib.backends zum ersten Mal importiert wird. –

+3

Ich habe das abgelehnt, weil es nicht für mich funktioniert hat und immer noch nicht, aber anscheinend ist das [Problem 1927] (https://github.com/ipython/ipython/issues/1927) und es sollte behoben worden sein mit [merge 2179] (https://github.com/ipython/ipython/pull/2179). @ yarox, wenn Sie Ihre Antwort bearbeiten, um diese Informationen zu integrieren, werde ich meinen Downvote rückgängig machen. – askewchan

41

Wenn Sie nur von Inline-Plots zu interaktiven und zurück wechseln möchten (so dass 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 Magie ein paar andere Dinge importiert und in einem Konflikt sogar führen kann. Es funktioniert "von pylab import *".

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

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

Wenn Sie in Ihren Charts mehr Interaktivität haben wollen, können Sie bei mpld3 und Bokeh aussehen kann. mpld3 ist großartig, wenn Sie keine Tonnen von Datenpunkten haben (z. B. < 5k +) und Sie normale Matplotlib-Syntax verwenden möchten, aber mehr Interaktivität im Vergleich zu% matplotlib notebook. Bokeh kann viele Daten verarbeiten, aber Sie müssen seine Syntax lernen, da es sich um eine separate Bibliothek handelt.

Sie können auch pivottablejs Besuche (PiP pivottablejs installieren)

from pivottablejs import pivot_ui 
pivot_ui(df) 

jedoch kühl interaktiven Datenexploration ist, kann es vollständig mit der Reproduzierbarkeit Chaos. Es ist mir passiert, also versuche ich es erst sehr früh zu verwenden und zu reinem Inline Matplotlib/Seaborn zu wechseln, sobald ich das Gefühl für die Daten habe.

3

Eine bessere Lösung für Ihr Problem könnte die Charts Bibliothek sein. Es ermöglicht Ihnen, die ausgezeichnete JavaScript-Bibliothek Highcharts zu verwenden, um schöne und interaktive Plots zu erstellen. Highcharts verwendet den HTML-Code svg, so dass alle Ihre Diagramme Vektorgrafiken sind.

Einige Features:

  • Vector Plots, die Sie in .png, .jpg und .svg Formaten herunterladen können, so dass Sie nie in Auflösung Probleme
  • Interaktive Diagramme (Zoom, Rutsche, laufen Punkte schweben über , ...)
  • In einem IPython-Notebook verwendbar
  • Mithilfe der asynchronen Plotfunktionen können Sie Hunderte von Datenstrukturen gleichzeitig untersuchen.

Disclaimer: Ich bin der Entwickler der Bibliothek

+0

Eine schöne Bibliothek! Ich werde sicher sein, es auszuprobieren :) – metakermit

+0

Danke! Lassen Sie mich wissen, was Sie auf github denken und senden Sie ein Problem, wenn Sie irgendwelche Probleme haben :) – arnoutaertgeerts

+0

Während diese Antwort definitiv relevant ist, würde ich nicht unbedingt eine bessere Lösung nennen. Das hat in der Vergangenheit höchstwahrscheinlich einen Downvote verursacht. – volodymyr

13

mit matplotlib Ab 1.4.0 gibt es jetzt eine interaktive Backend für den Einsatz im Notebook

%matplotlib notebook 

Es gibt eine einige Versionen von IPython, für die dieser Alias ​​nicht registriert wurde, lautet der folgende:

Wenn das nicht funktioniert, updaten Sie IPython.

mit diesem, zur tmpnb.org

und

%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 einen Code-Zelle (oder nur ändern Sie die vorhandene Python Demo Notebook)

1

Restart-Kernel und klaren Ausgang einfügen spielen (wenn nicht beginnend mit neuem Notebook), dann

%matplotlib tk 

Für mo re info go to Plotting with matplotlib

2

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

Hier ist ein Beispiel, um mit ipython magic zwischen einem separaten Fenster und einem Inline-Plot-Modus hin- und her zu blättern.

>>> 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... 
+1

Wenn ich versuche, '% matplotlib' zu verwenden, bekomme ich einen Fehler, der mit' ImportError endet: Kein Modul namens 'PyQt4'' – user3731622

+0

Ich bekomme genau das gleiche Problem wie user3731622. Was kann getan werden? Dies ist für die meisten Antworten auf dieser Seite – mkheifetz