我试图将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确实有一些我想要利用的有用的东西。答案 0 :(得分:1)
听起来您只需要用
替换行self.axes.plot(self.x, self.y)
self.axes.imshow(img)
其中img
是图像的numpy数组,你必须先加载它。