在 PyQt4 中嵌入 matplotlib

Embedding matplotlib in 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 派生的 class 代码中,我可以通过以下方式嵌入上面的 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(whatever)' 并不重要,我只是对在我的嵌入式 matplotlib 小部件中显示图像数据(在 numpy 数组中)感兴趣。但是,imshow 确实有一些我想利用的有用的东西。

听起来你只需要将行 self.axes.plot(self.x, self.y) 替换为

self.axes.imshow(img)

其中 img 是图像的 numpy 数组,您必须在此之前加载它。