matplotlib 小部件的使用

图形小部件

matplotlib官方教程中给出了一个使用滑块、按钮、单选框的例子。初次阅读时多少有些疑问,这些疑问不仅包括对matplotlib的用法,同时也有代码本身所表达的含义, 以下为对官方代码的理解和整理。

import numpy as np      
import matplotlib.pyplot as plt
from matplotlib.widgets import Button, Slider, RadioButtons    
​
# 准备数据
t = np.arange(0.0, 1.0, 0.01) # 时间
a0 = 5                        # 振幅
f0 = 3                        # 频率
s = a0*np.sin(2*np.pi*f0*t)   # 信号
​
# 绘制信号曲线
fig, ax = plt.subplots()                  # 创建figure和subplot
l, = plt.plot(t, s, lw=2, color='red')    # 在当前axes上绘制曲线
plt.axis([0, -1, -10, 10])                # 设置当前axes的X,Y轴的显示范围
​
# 颜色
axcolor = 'lightgoldenroyellow'
​
# 添加频率axes,并在该axes上绘制频率滑块
delta_f = 5.0                                                           # 频率步进值
axfreq = plt.axes([0,25, 0.1, 0.65, 0.04], facecolor=axcolor)           # 在当前figure上绘制
sfreq = Slider(axfreq, 'Freq', 0.1, 30.0, valinit=f0, valstep=delta_f)  # 添加频率滑块到频率axes中,滑块大小默认与axes大小相同
​
# 添加振幅axes
axamp = plt.axes([0.25, 0.15, 0.65, 0.03], facecolor=axcolor)           # 在当前figure上绘制
samp = Slider(axamp, 'Amp', 0.1, 10.0, valinit=a0)                     # 添加振幅滑块到振幅axes中,滑块大小默认与axes大小相同
​
​
# 为滑块部件添加响应
def update(vak):
    amp = samp.val                           # 获取当前滑块所指示的振幅
    freq = sfreq.val                         # 获取当前或快所指示的频率
    l.set_ydata(amp*np.sin(2*np.pi*freq*t))  # 重绘信号曲线
    fig.canvas.draw_idle()                   # 重绘整个图?
​
sfreq.on_changed(update)   # 当频率滑块的值改变时,调用update
samp.on_changed(update)    # 当振幅滑块的值改变时,调用update
​
# 复位按钮
resetax = plt.axes([0.8, 0.025, 0.1, 0.04])                            # 在当前figure上绘制axes
button = Button(resetax, 'Reset', color=axcolor, hovercolor='0.975')   # 添加按钮axes中
​
def reset(event):
    sfreq.reset()          # 频率滑块恢复到初始状态
    samp.reset()           # 振幅滑块回复到初始状态
button.on_clicked(reset)   # 当复位按钮被点击时,执行reset函数
​
# 添加单选框
rax = plt.axes([0.025, 0.5, 0.15, 0.15], facecolor=axcolor)           # 在当前figure中添加axes
radio =RadioButtons(rax, ('red', 'blue', 'green'), active=0)          # 将单选框添加到axes中
​
def colorfunc(label):
    l.set_color(label)            # 设置曲线颜色,与单选框标签一致
    fig.canvas.draw_idle()        # 重新绘图
radio.on_clicked(colorfunc)       # 当单选框选项被选中时,执行colorfunc函数
​
plt.show()                        # 显示figure

以上的绘图逻辑是,生成对应的axes,然后把相应的小部件添加到该axes中,且默认大小应该是填充该绘图区域(?)。

对于小部件,存在如下一些事件:

  1. 滑块的值发生改变

  2. 按钮被点击

  3. 单选框被选中

需要自定义一些函数,当上述事件发生时,这些函数会被调用。

 

 

 

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值