【问题标题】:Modifying Matplotlib figure axes within PyQT4在 PyQT4 中修改 Matplotlib 图形轴
【发布时间】:2016-04-23 08:28:22
【问题描述】:

我想创建一个在 PyQT4 GUI 中嵌入 Matplotlib 动画的应用程序。我试图弄清楚 FigureCanvasQTAgg 对象如何工作的基础知识,并且在创建后无法更改轴限制。在下面的程序中,使用 FigureCanvasQTAgg 对象生成了一个非常简单的图形,我希望按下按钮来更改结果图的 x 轴范围。 (注意以下代码是this post末尾代码的简化版。)

import sys
from PyQt4 import QtGui
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure

class Window(QtGui.QDialog): 

def __init__(self):
    super(Window, self).__init__()
    self.fig = Figure()
    self.canvas = FigureCanvas(self.fig)
    self.ax = self.fig.add_subplot(111)  # create an axis
    self.ax.hold(False)  # discards the old graph
    self.ax.set_xlim([0, 100])
    self.ax.set_ylim([-10, 10])
    self.ax.set_xlabel('Random x label')
    self.button = QtGui.QPushButton('Adjust axes')
    self.button.clicked.connect(self.axis_adjust)

    # set the layout
    layout = QtGui.QVBoxLayout()
    layout.addWidget(self.canvas)
    layout.addWidget(self.button)
    self.setLayout(layout)
    self.canvas.draw()

def axis_adjust(self):
    self.ax.set_xlim([0, 200])
    self.ax.set_xlabel('New label')


app = QtGui.QApplication(sys.argv)
ex = Window()
sys.exit(app.exec_())

不幸的是,当我运行我的程序并单击“调整轴”按钮时,它完全没有效果。我根本不明白的一件事是self.canvas.draw() 行的作用。从a Matplotlib tutorial,我得到的印象是这使得图形实际出现在GUI 窗口中......但事实并非如此,因为当我注释掉self.canvas.draw() 行时,图形仍然出现在GUI 窗口中。实际上是 self.setLayout(layout) 行使该图形出现在 GUI 窗口中,从我所阅读的内容来看,这没有意义。看来我对这个功能缺乏了解是我问题的根源......

【问题讨论】:

    标签: python matplotlib pyqt4


    【解决方案1】:

    我之前写过一个简单的应用程序。根据我的经验,self.canvas.draw() 必须在使用 matplotlib 功能更新设置或绘制曲线(或任何其他对象)后调用。它只是一个触发任何图形对象更新的函数。因此,只需将self.canvas.draw() 添加到回调函数的末尾axis_adjust() 即可解决您的问题。

    仅供参考,您的 UI 层次结构将是 QtGui.QDialog->QtGui.QVBoxLayout->FigureCanvas->matplotlib.figure.Figure

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-17
      • 1970-01-01
      • 2013-09-12
      • 1970-01-01
      • 2016-09-24
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      相关资源
      最近更新 更多