Matplotlib 为啥我点击后绘图功能会在按钮内绘制?

Posted

技术标签:

【中文标题】Matplotlib 为啥我点击后绘图功能会在按钮内绘制?【英文标题】:Matplotlib why does the plot function draw inside the button after i click?Matplotlib 为什么我点击后绘图功能会在按钮内绘制? 【发布时间】:2021-08-09 19:46:53 【问题描述】:

您好,我正在尝试在按钮单击事件后在我的绘图中绘制图形,问题是图形是在按钮内部绘制的,而不是正常的绘图。

代码如下:

import matplotlib.pyplot as plt
from matplotlib.widgets import Slider,Button

class Details:
    def drawPlot(self,event):
        plt.plot([1,3,4])
    def addTitle(self,title):
        plt.title(title)
    def plot(self):
        x = 1
        plt.show()
    def addButton(self):
        self.axnext = plt.axes([0.71, 0.1, 0.1, 0.075])
        self.bnext = Button(self.axnext, 'Next')
        self.bnext.on_clicked(self.drawPlot)


d = Details()
d.addTitle("cas dakar 1")
d.addButton()
d.plot()

提前致谢!

【问题讨论】:

【参考方案1】:

plt.plot 在当前坐标区上绘制。因此,当您为按钮创建轴时,它将成为当前轴,然后您尝试绘制,它会在那里绘制而不是您的主轴。

如果你切换到object-oriented interface,这个问题就消失了:

import matplotlib.pyplot as plt
from matplotlib.widgets import Slider,Button

class Details:

    def __init__(self):
        fig, ax = plt.subplots()
        self.fig = fig
        self.ax = ax

    def drawPlot(self,event):
        self.ax.plot([1,3,4])

    def addTitle(self,title):
        self.ax.set_title(title)

    def plot(self):
        x = 1
        plt.show()

    def addButton(self):
        self.axnext = plt.axes([0.71, 0.1, 0.1, 0.075])
        self.bnext = Button(self.axnext, 'Next')
        self.bnext.on_clicked(self.drawPlot)


d = Details()
d.addTitle("cas dakar 1")
d.addButton()
d.plot()

【讨论】:

问题,有没有办法在我点击按钮之前隐藏绘图区域?谢谢。

以上是关于Matplotlib 为啥我点击后绘图功能会在按钮内绘制?的主要内容,如果未能解决你的问题,请参考以下文章

matplotlib 绘图问题

为啥用 Matplotlib 绘图这么慢?

怎样用python画图,为啥代码写好运行时错误?

尝试使用 matplotlib 内联绘图时,为啥在 jupyter notebook 中出现 NonGuiException?

Python 和 Matplotlib:在 Jupyter Notebook 中制作交互式 3D 绘图

Python数据可视化利器Matplotlib从入门到高级4