Answer a question

I know that plotly renders into HTML and can be embedded in web-like environments. I wonder if one can do that inside an HTML window in a PyQt application? Specifically I'd like to know if that works offline, having no internet connection.

EDIT:

This is an excerpt how I finally embedded graphs using 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)

And then in another function:

    # 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)

Answers

Plotly is primarily developed to make graphing in a browser easy. I don't think it can be embedded into a UI framework like PyQT or Tkinter. Plotly has a enterprise version which works in our company network without a internet connection.

PyQtgraph or MatPlotLib may be an option for you if you really need to embedd graphs in PyQT.

Here's sample code to export graphs as png's and then embed png image into your PyQT application.

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"))
Logo

Python社区为您提供最前沿的新闻资讯和知识内容

更多推荐