python matplotlib -- 重新生成图形?
我有一个 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)