pyqt5,matplotlib2和axes.hold

问题描述:

的折旧从https://gist.github.com/pklaus/3e16982d952969eb8a9a嵌入matplotlib图形集成到QT GUI我有以下代码:pyqt5,matplotlib2和axes.hold

# https://gist.github.com/pklaus/3e16982d952969eb8a9a 
class MatplotlibCanvas(FigureCanvas): 

    """Ultimately, this is a QWidget (as well as a FigureCanvasAgg, etc.).""" 
    def __init__(self, mystacker, spectrum_id, parent=None, width=5, height=4, dpi=100): 
     self.stacker = mystacker 
     self.spectrum_id = spectrum_id 

     fig = Figure(figsize=(width, height), dpi=dpi) 
     self.axes = fig.add_subplot(111) 
     # We want the axes cleared every time plot() is called 
     self.axes.hold(False) 

     self.compute_initial_figure() 

     FigureCanvas.__init__(self, fig) 
     self.setParent(parent) 

     FigureCanvas.setSizePolicy(self, QSizePolicy.Expanding, QSizePolicy.Expanding) 
     FigureCanvas.updateGeometry(self) 

    def compute_initial_figure(self): 
     spectrumplot.plot_spectrum(self.stacker, self.spectrum_id, self.axes) 

但随着新版本matplotlib 2,我得到以下警告:

MatplotlibDeprecationWarning: axes.hold is deprecated. See the API Changes document (http://matplotlib.org/api/api_changes.html) for more details.

http://matplotlib.org/api/api_changes.html

“hold”关键字参数以及与 相关的所有函数和方法以及“axes.hold”rcParams条目都已弃用。 行为将与默认保持=真实状态 一直保持一致。除了使用函数或关键字 自变量(hold = False)更改该行为外,在后续绘制命令之前,请根据需要明确清除轴或图。

在我的情况下,“根据需要明确清除轴或图”的正确调用是什么?

从显示的代码中不清楚,在这一点上你实际上需要hold(False)

该文档说的是,如果您需要而不是依赖某些自动清除,您应该明确地清除轴。即在您喜欢的任何点使用self.axes.clear()来清除坐标轴并删除其内容。实际上是否需要清除轴取决于您的使用情况。 通常更新斧头中的艺术家比清理斧头和重新创建艺术家要干净得多。

(您可能需要更新您的问题,包括你正在做什么的详细信息,有人jugde在这一点上,你将需要这一点。)

+0

我只是假设'保持(假)'图形需要在调整大小时正确重绘。但事实证明,如果没有'hold(False)',它会按预期工作(重新创建轴并选择适当的刻度标记)。我会暂时放弃它,并引入一个'self.axes.clear()',如果我遇到任何问题。 – mnagel