python matplotlib -- 重新生成图形?

1 投票
2 回答
1182 浏览
提问于 2025-04-16 19:29

我有一个 python 函数,它可以生成一个包含随机值的列表。

在我调用这个函数之后,我又调用了另一个函数,用 matplotlib 来绘制这些随机值。

我希望能够通过按下键盘上的某个键或者点击鼠标,做到以下几点:

(1) 重新生成一份新的随机值列表

(2) 用新的随机值替换掉当前的 matplotlib 图表进行绘制

也就是说,我希望能通过点击一个按钮来查看新的图表。我该如何在 python 中实现这个功能呢?

2 个回答

0

从 matplotlib.widgets 导入 Button 这个模块。

我们用 plt.axes() 创建一个坐标轴,然后在这个坐标轴上画出一些点,这些点的横坐标是 xpts,纵坐标是 ypts,透明度设置为 0.4,点的大小是 size,颜色是绿色,并且给这些点加上标签叫“真实数据”。

# 重置按钮
# rect = [左边, 底部, 宽度, 高度]
我们在坐标轴上定义一个区域,位置是 [0.4, 0.15],宽度是 0.1,高度是 0.04,这个区域用来放重置按钮。
然后我们创建一个按钮,放在刚才定义的区域里,按钮的标签是“重置”,颜色是浅蓝色,鼠标悬停时颜色会变成稍微深一点的蓝色。

定义一个重置的函数,当按钮被点击时,这个函数会被调用。这个函数的作用是把之前画的点移除。

当按钮被点击时,调用重置函数。

最后,显示这个图形窗口。

3

用matplotlib来实现这个功能其实非常简单。基本的思路是使用

plt.connect('button_press_event', onclick)

来在用户点击按钮时调用 onclick 函数:

import matplotlib.pyplot as plt
import numpy as np

class Main(object):
    def clear(self):
        plt.clf()
    def redraw(self):
        self.clear()
        plt.plot(self.data)
        plt.title('100')
        plt.text(50,0.85,'100')
        plt.draw()
    def on_click(self,event):
        self.data=np.random.random(100)    
        self.redraw()        
    def run(self):
        plt.figure()
        plt.connect('button_press_event', self.on_click)
        plt.show() 

    def __init__(self):
        self.data=np.random.random(100)    

if __name__=='__main__':           
    m=Main()
    m.run()
    print(m.data)

撰写回答