pyqt5,matplotlib2和axes.hold的弃用

时间:2017-02-10 09:08:09

标签: python matplotlib pyqt5

基于来自https://gist.github.com/pklaus/3e16982d952969eb8a9a的演示代码,用于将matplotlib图嵌入到qt GUI中,我有以下代码:

# 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'rccarams条目。该   行为将与默认的hold = True状态保持一致   早已到位。而不是使用函数或关键字   参数(hold = False)改变那种行为,明确地清除了   在随后的绘图命令之前根据需要设置轴或图。

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

1 个答案:

答案 0 :(得分:3)

从显示的代码中不清楚,此时您实际需要hold(False)

文档说明如果您需要而不依赖于某些自动清除,则应明确清除轴。即在您想要清除轴并删除其内容的任何位置使用self.axes.clear()。是否确实需要清除轴取决于您的使用情况。 通常,更新轴上的艺术家比清除轴和重新创建艺术家要清晰得多。

(您可能希望更新您的问题,以包含有关您正在做什么的更多信息,以便有人在您需要的时候进行调查。)