在PyQt4中嵌入matplotlib

时间:2017-06-20 18:31:09

标签: python-2.7 matplotlib pyqt4

我试图将matplotlib嵌入到PyQt4 + Python 2.7应用程序中,这样我就可以在我的UI中可视化图像(即2D)数据。我想使用matplotlib的一些功能,如色彩映射,缩放等。我已经在网上找到了一些教程,但最接近我的问题的是以下SO问题:

Embedding matplotlib in pyqt4 using imshow

与作者一样,我也喜欢使用" imshow(...)"。通过在线教程,我可以将matplotlib作为QWidget嵌入我的UI中,如下所示:

from PyQt4.QtCore import *
from PyQt4.QtGui import *
import numpy as np
from matplotlib.figure import Figure
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas

class matPlotLibImage(FigureCanvas):
    def __init__(self):
        self.fig = Figure()
        self.axes = self.fig.add_subplot(111)
        self.x = np.arange(0.0, 3.0, 0.01)
        self.y = np.cos(2*np.pi*self.x)
        self.axes.plot(self.x, self.y)
        super(MatPlotLibImage, self).__init__(self.fig)

在我的QDockWidget派生类代码中,我可以通过以下方式嵌入上面的matplotlib小部件:

self.mainImage = MatPlotLibImage()
self.setWidget(self.mainImage)

这可以正常工作并显示一个简单的图。然而,现在,我想显示表示为numpy数组的图像数据。我在网上看到的所有例子都使用以下变体:

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np

img = mpimg.imread("someImage.png")
imgplot = plt.imshow(img)

我的问题是:如何将这两种方法结合起来,以便我可以使用' imshow()'但是就像我为简单情节所做的那样嵌入?提前谢谢。

澄清:严格地说,我使用' imshow(无论如何)',我只是对我在我的显示中显示图像数据(在一个numpy数组中)感兴趣并不重要嵌入式matplotlib小部件。但是,imshow确实有一些我想要利用的有用的东西。

1 个答案:

答案 0 :(得分:1)

听起来您只需要用

替换行self.axes.plot(self.x, self.y)
self.axes.imshow(img)

其中img是图像的numpy数组,你必须先加载它。