【问题标题】:Can't get canvas to draw fig in matplotlib无法让画布在 matplotlib 中绘制无花果
【发布时间】:2012-03-08 12:41:28
【问题描述】:

根据我对使用 matplotlib 的基本理解,您可以将所需的 plt 存储在一些“无花果”中,然后您可以使用 canvas.draw() 操作绘制所说的“无花果”。如果是这种情况,那么我应该没有任何问题,但是既然我这样做了,到底发生了什么以及在画布上获得某些东西的逻辑是什么。此外,我的最终目标是在 QtPy 窗口中显示此图。到目前为止的结果是我可以显示窗口和画布,但画布显示为空。我一直在看http://matplotlib.sourceforge.net/users/artists.html,感觉我所做的并不完全错误,但也许我忽略了一些细微差别。这是我引用的代码:

def drawThis(self):

        self.axes.clear()
        self.axes.grid(self.grid_cb.isChecked())
        self.fig = plt.figure(figsize=(11,7),dpi=self.dpi)
        file = fileList[selFile]
        valid = [sColumn]
        matrix = np.loadtxt(file, skiprows=1, usecols=valid)
        colCount = np.loadtxt(file, dtype=object)
        totalCols = colCount.shape[1]

        kdeData = np.array(matrix)
        dataRange = (Decimal(max(abs(kdeData))) / 10).quantize(1, rounding=ROUND_UP) * 10

        gkde = stats.gaussian_kde(kdeData)
        ind = np.linspace(-int(dataRange), int(dataRange), len(kdeData) * sSamples)
        kdepdf = gkde.evaluate(ind)

        ##plot histogram of sample
        plt.hist(kdeData, len(kdeData), normed=1, alpha=0.20)
        ##plot data generating density
        plt.plot(ind, stats.norm.pdf(ind), 'r', linewidth=0.8, label='DGP normal')
        ##plot estimated density
        plt.plot(ind, kdepdf, 'g', linewidth=0.8, label='kde')
        plt.title('KDE for '+ str(nameList[selFile]))
        plt.legend()

        self.fig.canvas.draw()

【问题讨论】:

    标签: python numpy matplotlib pyqt


    【解决方案1】:

    我对 matplotlib 没有任何经验,但是在查看您的代码时,我想知道您对 pyplot 的使用是否正确?您的代码在我看来是您使用 pyplot 生成数据(您不保留其返回值),然后绘制它,但我认为它实际上并未在您的轴实例上运行。

    我看到 matplotlib 被使用的一个例子可以在这里找到:Segfault using matplotlib with PyQt .. 他实际上是直接创建一个 PyQt4 FigureCanvas 并直接绘制到他的轴实例。

    似乎pyplot.plot() 方法可以带一个图形和轴参数来告诉它使用哪个实例。我想知道它是否没有使用您的轴,因为我在您的示例中看不到您如何创建轴本身。看看docs here

    我猜你可能会尝试做这样的事情:

    plt.plot(ind, kdepdf, 'g', axis=self.axis, linewidth=0.8, label='kde')
    

    或者,也许可以通过使用self.axis = plt.axis() 来确认您已创建self.axis,或者甚至尝试直接使用轴实例进行所有绘图?

    【讨论】:

    • 我想我误解了在我正在制作的窗口中实例化图形的过程。我实际上使用了您在示例中找到的部分代码来创建我正在做的事情,但我一直将我的情节存储在 plt 中,而不是“self.axes”中,这是实际显示在画布上的那个。在你提到我没有对使用 pyplot 生成的数据做任何事情之后终于意识到了这一点,谢谢。
    猜你喜欢
    • 2021-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-02
    • 2019-09-01
    • 1970-01-01
    相关资源
    最近更新 更多