matplotlib widgets Slider demo源码解释

matplotlib widgets Slider demo source code explanation(matplotlib widgets Slider demo源码解释)
本文介绍了matplotlib widgets Slider demo源码解释的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图了解 源代码 以便能够使用matplotlib 的滑块小部件.定义函数 update() 的那段代码真的很困扰我:

I'm trying to understand the source code to be able to use the Slider widgets of matplotlib. The piece of code defining function update() really bothers me:

我看不出在 def update(val): 中有参数 val 的意义,而 val 的值是没有提到任何地方.def reset(event): 函数也是同样的问题.到目前为止我已经完成了一些简单的测试:

I don't see the point of having the argument val in def update(val):, and the value of val is not referred to anywhere. It's the same issue with the def reset(event): function. Some simple tests I've done so far:

  1. val 参数的名称更改为其他随机词,例如 def update(wtf): 而不更改函数的主体.生成的代码仍然可以正常工作.
  2. 为参数添加一些默认值,例如 def update(wtf=None): 而不更改函数的主体.生成的代码仍然可以正常工作.
  3. 只需删除参数.def update():.滑块不再改变情节,这意味着脚本不起作用.
  1. change the name of val argument to other random word, say, def update(wtf): without changing the body of the function. The resulting code still works as desired.
  2. Adding some default value to the argument, say, def update(wtf=None): without changing the body of the function. The resulting code still works as desired.
  3. Simply remove the argument. def update():. The Slider NO LONGER changes the plot, meaning the script is not working.

我不明白这个 update 函数或 val 参数是如何工作的.谁能解释一下?

I don't understand how this update function or the val argument works. Can someone explain?

推荐答案

on_changed 回调会将滑块的当前值提供给函数.update 函数因此需要一个参数.示例中未使用此参数的原因是 update 函数需要两个滑块的值,而与更改哪个滑块无关,因此直接从 Slider 实例中获取值.

The on_changed callback will supply the current value of the slider to the function. The update function therefore needs an argument. The reason this argument is not used in the example is that the update function needs the values of both sliders, independently of which one is changed, and therefore takes the values directly from the Slider instances.

为了更好地理解滑块的工作方式,可以考虑以下简化版本:

To better understand the way the slider works, one may consider the following simplified version:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider

fig, ax = plt.subplots()
plt.subplots_adjust(left=0.25, bottom=0.25)
t = np.arange(0.0, 1.0, 0.001)
s = np.sin(6*np.pi*t)
l, = plt.plot(t, s, lw=2, color='red')
plt.axis([0, 1, -1.2, 1.2])

axfreq = plt.axes([0.25, 0.1, 0.65, 0.03], facecolor="lightblue")
sfreq = Slider(axfreq, 'Freq', 0.1, 20.0, valinit=3)

def update(val):
    l.set_ydata(np.sin(2*np.pi*val*t))
    fig.canvas.draw_idle()

sfreq.on_changed(update)

plt.show()

这里只有一个滑块,值被传递给更新函数,用于计算新的 ydata 值.

Here you only have one slider and the value is passed to the update function, where it is used to calculate new ydata values.

非常类似,按钮的 on_click 回调将点击事件传递给函数.在这种情况下,这毫无用处,但可能会用于查看使用了哪个鼠标按钮,或者点击的确切位置.

Very simlarly, the on_click callback of the button passes a click event to the function. This is pretty useless in this case, but could potentially be used to see, which mouse button has been used, or where exactly the click has happened.

def reset(event):
    if event.button == 1:
        sfreq.reset()
        samp.reset()
    else:
        print("Please use the left mouse button")
button.on_clicked(reset)

这篇关于matplotlib widgets Slider demo源码解释的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Leetcode 234: Palindrome LinkedList(Leetcode 234:回文链接列表)
How do I read an Excel file directly from Dropbox#39;s API using pandas.read_excel()?(如何使用PANDAS.READ_EXCEL()直接从Dropbox的API读取Excel文件?)
subprocess.Popen tries to write to nonexistent pipe(子进程。打开尝试写入不存在的管道)
I want to realize Popen-code from Windows to Linux:(我想实现从Windows到Linux的POpen-code:)
Reading stdout from a subprocess in real time(实时读取子进程中的标准输出)
How to call type safely on a random file in Python?(如何在Python中安全地调用随机文件上的类型?)