2016-06-30 14 views
0

Ich verwende Jupyter (mit IPython), um Forschungsdaten zu analysieren, sowie exportieren Zahlen. Ich mag den von Jupyter angebotenen Notebook-Ansatz sehr: Wenn ich nach langer Zeit ein Experiment wiederbesuche, kann ich leicht erkennen, wie die Zahlen den Daten entsprechen. Dies geschieht natürlich über das Inline-Backend.Verwenden Sie sowohl Matplotlib Inline und Qt in Jupyter Notebook

Wenn ich jedoch neue Daten erkunden möchte, verwende ich lieber das QT-Backend. Es ist schneller als das Inline-Modell und ermöglicht einfaches Skalieren, Vergrößern und Verkleinern sowie die Anzeige der X- und Y-Koordinaten in der linken unteren Ecke. Außerdem kann ich das QT-Backend verwenden, um gute x- und y-Limits für das Inline-Backend zu bestimmen.

Ich habe versucht mit der %matplotlib notebook Magie, aber es ist einfach zu langsam. Für einige Experimente zeichne ich ~ 500 Spektren (jede besteht aus ~ 1000 Datenpunkten), was im Inline-Backend bereits langsam ist. Selbst mit weniger Datenpunkten ist das Notebook-Backend einfach zu langsam zu verwenden.

Daher möchte ich sowohl das QT-Backend, als auch das Inline-Backend verwenden, wenn ich etwas plotte. (Wenn ich also eine Zelle ausführe, die Daten plottet, sollte sowohl das Inline-Bild angezeigt als auch ein QT-Backend-Fenster geöffnet werden). Auf diese Weise habe ich immer noch einen schönen Überblick über die Plots in meinem Notizbuch und kann meine Daten problemlos durchsuchen. Gibt es einen Weg, dies zu erreichen?

Antwort

0

Dies ermöglicht es Ihnen, QtConsole auszuführen, Plotten mit der PlotSin-Funktion, sowohl inline als auch über die QtConsole.

import matplotlib 
import numpy as np 
import matplotlib.pyplot as plt 
%matplotlib inline 

..

def plotChirp(Type, Exp, Rand): 

    # Orignal Chirp Funciton From: 
    # http://stackoverflow.com/questions/19410042/how-to-make-ipython-notebook-matplotlib-plot-inline 
    x = np.linspace(0, 3*np.pi, Rand) 
    plt.plot(x, np.sin(x**int(Exp))) 
    plt.title('A simple chirp ' + Type) 
    plt.show() 

..

plotChirp("A", 5, 200) # Plots inline if you choose 

enter image description here

%connect_info # For your own connection 
%qtconsole 

QtConsole öffnet und jetzt können Sie Ihre Funktion extern plotten nennen ..

enter image description here

%matplotlib qt verwenden, können für das Drucken in einer Schleife, aber leider scheint es, die Grundstücke zu überlappen. Suche nach Unterverteilungen als mögliche Lösung.

%matplotlib qt 
for i in range(0,2): 

    if i == 0: 
     plotChirp("B",1, 400) 
    else: 
     plotChirp("c",6, 1000) 

enter image description here

+0

Vielen Dank für Ihre Antwort. Dies ist jedoch nicht das QT-GUI-Fenster, nach dem ich gesucht habe. Ich möchte das gleiche Fenster, das erscheint, wenn man '% matplotlib qt' verwendet, * nicht * die QT-Konsole (die nicht die netten Skalierungs-, Zoom- und Achseneigenschaftsänderungsfähigkeiten des anderen Fensters hat). – tcpie

+0

Sie können diesen Beitrag lesen, da er es ermöglicht, mehrere Diagramme in QT Gui mit Hilfe einer Scroll-Funktion durchzuscrollen: http://stackoverflow.com/questions/11563295/visualization-of-3d-numpy-array -frame-by-frame/11563414 # 11563414 –