来自 python 脚本的 Matplotlib 交互式小部件
Matplotlib interactive widget from python script
我正在调整 this example 以使用 matplotlib
的小部件与情节进行交互。
我通常的工作方式是交互式的,从 spyder
我只是调用一个函数来绘图。
我的目标是为未安装 Python
的用户提供可执行文件,因此作为中间步骤,我将函数包装到脚本中。
我对独立脚本的经验很少,所以简而言之shell我的看起来像这样:
import various_modules
def plotting()
...
plot_some_initial_stuff
sl = Slider()
plt.show() <-------
def update()
...
ax.set_ydata()
fig.canvas.draw_idle()
sl.on_change(update)
return()
plotting()
所以我只是定义绘图函数然后调用它。
我必须添加 plt.show()
命令,当我从 IPython
shell 工作时不需要,否则执行:
python my_plot.py
不会产生任何东西。通过添加 plt.show()
,window 显示了我在初始化部分定义的图形。但是,没有发生交互。
当运行像我这样的脚本时,实现交互的正确方法是什么?
虽然我不知道所有细节,但我了解到:
- 脚本的默认模式是non-interactive
- 这意味着
- 在调用
show()
之前不会生成绘图
- 语句后脚本的执行没有继续
因此,我对 show()
的调用为时过早,实际上阻止了 update
函数的定义及其与 slider.on_change()
事件的连接。
将 show()
移动到函数定义的最后一行以获得所需的行为就足够了。
我正在调整 this example 以使用 matplotlib
的小部件与情节进行交互。
我通常的工作方式是交互式的,从 spyder
我只是调用一个函数来绘图。
我的目标是为未安装 Python
的用户提供可执行文件,因此作为中间步骤,我将函数包装到脚本中。
我对独立脚本的经验很少,所以简而言之shell我的看起来像这样:
import various_modules
def plotting()
...
plot_some_initial_stuff
sl = Slider()
plt.show() <-------
def update()
...
ax.set_ydata()
fig.canvas.draw_idle()
sl.on_change(update)
return()
plotting()
所以我只是定义绘图函数然后调用它。
我必须添加 plt.show()
命令,当我从 IPython
shell 工作时不需要,否则执行:
python my_plot.py
不会产生任何东西。通过添加 plt.show()
,window 显示了我在初始化部分定义的图形。但是,没有发生交互。
当运行像我这样的脚本时,实现交互的正确方法是什么?
虽然我不知道所有细节,但我了解到:
- 脚本的默认模式是non-interactive
- 这意味着
- 在调用
show()
之前不会生成绘图 - 语句后脚本的执行没有继续
- 在调用
因此,我对 show()
的调用为时过早,实际上阻止了 update
函数的定义及其与 slider.on_change()
事件的连接。
将 show()
移动到函数定义的最后一行以获得所需的行为就足够了。