python教程—具有两个滑块的交互式matplotlib绘图-Python实用宝典

python教程—具有两个滑块的交互式matplotlib绘图

我使用matplotlib创建了一些plot,它依赖于8个变量。我想研究当我改变其中一些情节时,情节是如何变化的。我创建了一些脚本,调用matplotlib 1并生成不同的快照,稍后我将这些快照转换成电影,这并不坏,但是有点笨拙。

我使用matplotlib创建一些图,它依赖于8个变量。我想研究当我改变其中一些情节时,情节是如何变化的。我创建了一些脚本,调用了matplotlib 1并生成了不同的快照,稍后我将其转换为电影,这并不差,但是有点笨拙。

  1. 我想知道我是否可以使用键盘键来增加/减少一些变量的值,并立即查看情节的变化,从而与情节再生进行交互。

  2. 最好的方法是什么?

  3. 另外,如果你能给我指出有趣的链接或一个只有两个滑块的情节示例链接?

回答

除了@triplepoint提到的内容之外,还可以看看slider小部件。

在matplotlib examples页面上有一个示例。它是一个图形滑块而不是键盘绑定,但是对于您想要做的事情,它工作得非常好。

还要注意,为了保证滑块和按钮保持响应性,而不是垃圾收集,应该自己维护对对象(amp_slider、freq_slider等)的引用。

(我正在创建这个社区wiki,因为我只是从示例中复制粘贴。这个特殊的例子教会了我们坏习惯(例如pylab import *),但是它让我们明白了这一点。这个例子已经被修复,以避免使用pylab。)

    from numpy import pi, sin import numpy as np import matplotlib.pyplot as plt from matplotlib.widgets import Slider, Button, RadioButtons def signal(amp, freq): return amp * sin(2 * pi * freq * t) axis_color = 'lightgoldenrodyellow' fig = plt.figure() ax = fig.add_subplot(111) # Adjust the subplots region to leave some space for the sliders and buttons fig.subplots_adjust(left=0.25, bottom=0.25) t = np.arange(0.0, 1.0, 0.001) amp_0 = 5 freq_0 = 3 # Draw the initial plot # The 'line' variable is used for modifying the line later [line] = ax.plot(t, signal(amp_0, freq_0), linewidth=2, color='red') ax.set_xlim([0, 1]) ax.set_ylim([-10, 10]) # Add two sliders for tweaking the parameters # Define an axes area and draw a slider in it amp_slider_ax = fig.add_axes([0.25, 0.15, 0.65, 0.03], axisbg=axis_color) amp_slider = Slider(amp_slider_ax, 'Amp', 0.1, 10.0, valinit=amp_0) # Draw another slider freq_slider_ax = fig.add_axes([0.25, 0.1, 0.65, 0.03], axisbg=axis_color) freq_slider = Slider(freq_slider_ax, 'Freq', 0.1, 30.0, valinit=freq_0) # Define an action for modifying the line when any slider's value changes def sliders_on_changed(val): line.set_ydata(signal(amp_slider.val, freq_slider.val)) fig.canvas.draw_idle() amp_slider.on_changed(sliders_on_changed) freq_slider.on_changed(sliders_on_changed) # Add a button for resetting the parameters reset_button_ax = fig.add_axes([0.8, 0.025, 0.1, 0.04]) reset_button = Button(reset_button_ax, 'Reset', color=axis_color, hovercolor='0.975') def reset_button_on_clicked(mouse_event): freq_slider.reset() amp_slider.reset() reset_button.on_clicked(reset_button_on_clicked) # Add a set of radio buttons for changing color color_radios_ax = fig.add_axes([0.025, 0.5, 0.15, 0.15], axisbg=axis_color) color_radios = RadioButtons(color_radios_ax, ('red', 'blue', 'green'), active=0) def color_radios_on_clicked(label): line.set_color(label) fig.canvas.draw_idle() color_radios.on_clicked(color_radios_on_clicked) plt.show()

具有两个滑块的交互式matplotlib绘图

​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

本文由 Python实用宝典 作者:Python实用宝典 发表,其版权均为 Python实用宝典 所有,文章内容系作者个人观点,不代表 Python实用宝典 对观点赞同或支持。如需转载,请注明文章来源。
0

发表评论