如何将 matplotlib 函数与 QGraphicsView 集成?

Posted

技术标签:

【中文标题】如何将 matplotlib 函数与 QGraphicsView 集成?【英文标题】:How to integrate matplotlib fumction with QGraphicView? 【发布时间】:2017-03-31 20:36:57 【问题描述】:

我正在使用 Qt Designer 和 PyQt4 开发一个桌面应用程序。我需要显示一个带有轮廓的图形,在 python 中可以使用 matplotlib.pyplot.contourf 完成。我想在 QGraphicView 对象中显示结果。

我正在尝试通过将 QGraphicView 提升为 Qt-Designer 中的 pygtgraph 来做到这一点。如果 QGraphicView 的对象名称是 CNOPlot 我已经写了

import matplotlib.pyplot as plt
self.CNOPlot.plot(plt.contourf(xx, yy, Z,cmap=plt.cm.autumn, alpha=0.8))

它在单独的窗口中给出输出。 我希望这是在 CNOPlot 内绘制的。

【问题讨论】:

在您的视图中添加QGraphicsScene 并在场景中渲染您的情节。 非常感谢@C.Dip。你能否举一些例子或任何链接来展示如何做到这一点。我对它完全陌生。 好的,我写一个简短的答案 我也不应该把它推广到pyqtgraph吗? 【参考方案1】:

这是一个简短的例子:

import matplotlib.pyplot as plt
from PyQt4 import QtGui
from PyQt4.Qt import Qt
from matplotlib.figure import Figure
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas

class MyView(QtGui.QGraphicsView):
    def __init__(self):
        QtGui.QGraphicsView.__init__(self)

        scene = QtGui.QGraphicsScene(self)
        self.scene = scene

        figure = Figure()
        axes = figure.gca()
        axes.set_title("title")
        axes.plot(plt.contourf(xx, yy, Z,cmap=plt.cm.autumn, alpha=0.8))
        canvas = FigureCanvas(figure)
        canvas.setGeometry(0, 0, 500, 500)
        scene.addWidget(canvas)

        self.setScene(scene)

【讨论】:

非常感谢,但它仍然是一个单独的窗口,并带有以下错误跟踪:AttributeError: QuadContourSet instance has no attribute 'float' xxyy 必须是整数数组。 但是按照要求他们不能。

以上是关于如何将 matplotlib 函数与 QGraphicsView 集成?的主要内容,如果未能解决你的问题,请参考以下文章

pandas与matplotlib综合案例

如何使用 matplotlib 紧密布局与 Figure?

Python matplotlib之函数图像绘制、线条rc参数设置

如何在 matplotlib 中为交互式绘图的 onclick(event) 函数创建类?

Matplotlib:如何显示已关闭的图形

matplotlib可视化之如何给图形添加数据标签?