栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用matplotlib的动画交互式绘图

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用matplotlib的动画交互式绘图

这是对代码的简单修改,以添加动画:

import numpy as npimport matplotlib.pyplot as pltimport matplotlib.animation as animationfrom matplotlib.widgets import SliderTWOPI = 2*np.pifig, ax = plt.subplots()t = np.arange(0.0, TWOPI, 0.001)initial_amp = .5s = initial_amp*np.sin(t)l, = plt.plot(t, s, lw=2)ax = plt.axis([0,TWOPI,-1,1])axamp = plt.axes([0.25, .03, 0.50, 0.02])# Slidersamp = Slider(axamp, 'Amp', 0, 1, valinit=initial_amp)# Animation controlsis_manual = False # True if user has taken control of the animationinterval = 100 # ms, time between animation framesloop_len = 5.0 # seconds per loopscale = interval / 1000 / loop_lendef update_slider(val):    global is_manual    is_manual=True    update(val)def update(val):    # update curve    l.set_ydata(val*np.sin(t))    # redraw canvas while idle    fig.canvas.draw_idle()def update_plot(num):    global is_manual    if is_manual:        return l, # don't change    val = (samp.val + scale) % samp.valmax    samp.set_val(val)    is_manual = False # the above line called update_slider, so we need to reset this    return l,def on_click(event):    # Check where the click happened    (xm,ym),(xM,yM) = samp.label.clipbox.get_points()    if xm < event.x < xM and ym < event.y < yM:        # Event happened within the slider, ignore since it is handled in update_slider        return    else:        # user clicked somewhere else on canvas = unpause        global is_manual        is_manual=False# call update function on slider value changesamp.on_changed(update_slider)fig.canvas.mpl_connect('button_press_event', on_click)ani = animation.FuncAnimation(fig, update_plot, interval=interval)plt.show()

主要变化是

update_plot
功能的添加,该功能用于
FuncAnimation
在倒数第二行中添加a。动画从设置的最后一个滑块值开始递增。

该变量

is_manual
跟踪用户何时单击滑块。用户单击它之后,变量将设置为
True
,并且动画将不再更新绘图。

为了恢复动画,我添加了一个

on_click
功能,该功能设置
is_manual = False
用户何时单击画布上滑块以外的其他位置。

由于这是一个快速处理的脚本,因此我将变量保留为全局变量,但是您可以轻松地将其编写在适当的类中。

请注意,

samp.set_val
隐式调用会调用该
update_slider
函数,当用户直接单击滑块时也会调用该函数,因此我们必须
is_manual
在该
update_plot
函数中进行重置。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/646500.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号