来自python脚本的Matplotlib交互式小部件

时间:2017-04-01 18:56:28

标签: python-3.x matplotlib-widget

我正在调整this example以使用matplotlib的小部件与情节互动。 我通常的工作方式是互动的,从spyder开始,我只是调用一个执行绘图的函数。 我的目标是为没有安装Python的用户提供可执行文件,因此作为中间步骤,我将函数包装到脚本中。 我对独立脚本的经验很少,所以简而言之,我看起来像这样:

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(),窗口显示我在初始化部分中定义的图形。但是,没有互动发生。

运行像我正在做的脚本时,实现交互的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

虽然我不知道所有细节,但我了解到:

  • 脚本的默认模式为non-interactive
  • 这意味着
    • 在调用Dim com As SqlCommand = New SqlCommand("select Date,Title,Content from Log where Author = @Author", con) com.Parameters.Add("@Author", SqlDbType.Char) com.Parameters("@Author").Value = User.Identity.Name Dim dt As DataTable = New DataTable() For Each Datarow In dt.Rows //create New div with its content Next
    • 之前,不会生成任何情节
    • 在语句
    • 之后,脚本的执行不会继续

因此,我对show()的调用过早,实际上阻止了show()函数的定义及其与update事件的关联。

slider.on_change()移动到函数定义的最后一行就足以获得所需的行为。