2015-03-07 8 views
5

Ich weiß, dass plotly in HTML rendert und in Web-ähnliche Umgebungen eingebettet werden kann. Ich frage mich, ob man das in einem HTML-Fenster in einer PyQt-Anwendung machen kann? Speziell würde ich gerne wissen, ob das offline funktioniert, keine Internetverbindung hat.Kann ich Plot-Grafiken (offline) in meine PyQt4-Anwendung einbetten?

EDIT:

Dies ist ein Auszug, wie ich Graphen schließlich eingebettet mit matplotlib:

from PyQt4 import QtGui 

from matplotlib.backends.backend_qt4agg \ 
    import FigureCanvasQTAgg as FigureCanvas 
from matplotlib.backends.backend_qt4agg \ 
    import NavigationToolbar2QT as NavigationToolbar 
import matplotlib.pyplot as plt 


class Contour(QtGui.QFrame): 

    def __init__(self, parent=None): 
     super(Contour, self).__init__(parent) 

     self.parent = parent 

     # a figure instance to plot on 
     self.figure = plt.figure(figsize=(20, 30)) 
     r, g, b = 100./255., 100./255., 100./255. 
     self.figure.patch.set_facecolor(color=(r, g, b)) 

     # this is the Canvas Widget that displays the `figure` 
     # it takes the `figure` instance as a parameter to __init__ 
     self.canvas = FigureCanvas(self.figure) 

     # this is the Navigation widget 
     # it takes the Canvas widget and a parent 
     self.toolbar = NavigationToolbar(self.canvas, self) 

     # set the layout 
     layout = QtGui.QVBoxLayout() 
     layout.addWidget(self.toolbar) 
     layout.addWidget(self.canvas) 
     self.setLayout(layout) 

Und dann in einer anderen Funktion:

# create an axis 
    ax1 = self.figure.add_subplot(211, frame_on=False) 
    ax2 = self.figure.add_subplot(212, frame_on=False) 

    # plot data 
    r, g, b = 39./255., 40./255., 34./255. 
    ax1.plot(x, y, ls='o', color=(r, g, b), linewidth=3) 
    ax1.plot(coo[0], coo[1], 'go', zorder=20) # leading edge 
    ax1.plot(xg, yg, 'mo', zorder=30) # leading edge 
    ax1.plot(xr, yr, 'yo', zorder=30) # curvature circle center 
    ax1.add_patch(circle) 
    ax1.set_title('Contour', fontsize=14) 
    ax1.set_xlim(-10.0, 110.0) 
    # ax1.set_ylim(-10.0, 14.0) 
    r, g, b = 249./255., 38./255., 114./255. 
    ax1.fill(x, y, color=(r, g, b)) 
    ax1.set_aspect('equal') 

    ax2.plot(coo[0], gradient, 'go-', linewidth=3) 
    ax2.set_title('Gradient', fontsize=14) 
    ax2.set_xlim(-10.0, 110.0) 
+2

Warum versuchst du es nicht einfach? – ekhumoro

+0

Und dann erzählen wir den Rest von uns. : D –

Antwort

0

Plotly in erster Linie, um die grafische Darstellung in entwickelt ein Browser einfach. Ich denke nicht, dass es in ein UI-Framework wie PyQT oder Tkinter eingebettet werden kann. Plotly hat eine Unternehmensversion, die ohne Internetverbindung in unserem Firmennetzwerk funktioniert.

PyQtgraph oder MatPlotLib kann eine Option für Sie sein, wenn Sie Grafiken in PyQT wirklich einbetten müssen.

Hier ist Beispielcode, um Grafiken als PNGs zu exportieren und dann PNG-Bild in Ihre PyQT-Anwendung einzubetten.

import matplotlib.pyplot as plt 
plt.plot([1,2,3,4,5], [10,20,30]) 
plt.savefig('graphs.png') 

import os,sys 
from PyQt4 import QtGui 
pic.setPixmap(QtGui.QPixmap("graphs.png")) 
+1

Möchte [bearbeiten], um einige Vorschläge für den spezifischen Einstieg in PyQtgraph oder MatPlotLib hinzuzufügen. –

0

nicht sicher, ob diese vollständig erfüllt setzen Sie Ihre Notwendigkeit, Sie haben

import plotly.plotly as py 

Sie das Bild speichern und dann

py.image.save_as({'data': data}, 'your_image_filename.png') 
pic.setPixmap(QtGui.QPixmap("your_image_filename.png")) 

Warnung, ich haven Versuchen Sie dies

einmal
1

Ich habe versucht, die Verwendung von:

import plotly.offline as plt 
. 
. 
. 
plt.plot(fig, filename=testName + '__plot.html') 

und dann versucht, eine Handlung zu erzeugen .. das gab mir eine HTML-Datei, die dann auch ich auf einem QWebView als URL-Eigenschaft versucht setzen [nur wenn es zu sehen rendert].

Bitte betrachten Sie das Bild für Ihre Referenz. Render :: Plotly Offline :: QtWebView

+0

Danke für diese Antwort. +1, weil du nach langer Zeit noch aufpasst. Ich benutze inzwischen auch Bokeh. – chiefenne

+1

Ich betrachte Bokeh auch. Ich versuche zu entscheiden, welches ich für das Datenanalyse-Tool meines Unternehmens verwenden soll. Danke für das up. – mrkrynmdsco