在 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 数组,您必须在此之前加载它。
我正在尝试将 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 数组,您必须在此之前加载它。