PyQt4,matplotlib,修改现有绘图的轴标签

Posted

技术标签:

【中文标题】PyQt4,matplotlib,修改现有绘图的轴标签【英文标题】:PyQt4, matplotlib, modifying the axis labels of an existing plot 【发布时间】:2013-10-16 02:42:20 【问题描述】:

我正在 PyQt4 和 matplotlib 中创建绘图。以下过于简化的演示程序显示我想更改轴上的标签以响应某些事件。为了在这里演示,我做了一个“指针输入”事件。该程序的行为是我根本没有在情节的外观上得到任何改变。

import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
import matplotlib.pyplot as plt
import random


class Window(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setMinimumSize(400,400)
        # set up a plot but don't label the axes
        self.figure = plt.figure()
        self.canvas = FigureCanvas(self.figure)
        self.axes = self.figure.add_subplot(111)
        h = QHBoxLayout(self)
        h.addWidget(self.canvas)

    def enterEvent(self, evt):
        # defer labeling the axes until an 'enterEvent'. then set
        # the x label
        r = int(10 * random.random())
        self.axes.set_xlabel(str(r))


if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = Window()
    w.show()
    app.exec_()

【问题讨论】:

【参考方案1】:

你快到了。完成调用 set_xlabel() 之类的函数后,您只需要指示 matplotlib 重新绘制绘图。

如下修改你的程序:

def enterEvent(self, evt):
    # defer labeling the axes until an 'enterEvent'. then set
    # the x label
    r = int(10 * random.random())
    self.axes.set_xlabel(str(r))
    self.canvas.draw()

您现在将看到每次将鼠标移入窗口时标签都会发生变化!

【讨论】:

谢谢。一般在什么情况下需要调用draw()来更新绘图的外观? 如果有人偶然发现这一点,我遇到了类似的问题:即使我调用 set_xlabel,我的坐标轴标签也不会显示。原来是排序问题,必须在绘制数据后调用set_xlabel

以上是关于PyQt4,matplotlib,修改现有绘图的轴标签的主要内容,如果未能解决你的问题,请参考以下文章

Python/Matplotlib - 有没有办法制作一个不连续的轴?

PyQt4 - 将滑块的范围链接到绘图轴的范围

Matplotlib 绘图:删除轴、图例和空白

matlab gui 怎样在指定的轴绘图

pyqtgraph 轴未正确显示

Python Pyx 绘图:在绘图的轴标签中使用 \mathbb