【问题标题】:Keeping multiple figures open with matplotlib after script is executed执行脚本后使用 matplotlib 打开多个图形
【发布时间】:2013-09-05 07:53:33
【问题描述】:

我对 matplotlib 中的窗口/图形有疑问。我不确定这是否可行,但想知道是否可行。 基本上,当我运行整个脚本时,最后会使用 matplotlib 绘制一个图表。为了在再次运行我的脚本后生成一个新图形,我必须关闭该图形窗口。

有没有办法保持打开而不关闭它?

我举个例子:

我会通过运行我的脚本来绘制图形 x。

然后我想将此图表保留在我的屏幕上,更改我的脚本,重新绘制图表,以便您可以看到旧图表和新图表。因此 n 个图可能是可见的。

请注意,我不想在脚本中绘制新图形。我只是希望能够查看图表、进行更改并查看新图表,而无需保存图表。

编辑

这是我的代码的绘图部分:

def plot_data(atb_mat_2, sd_index, sd_grad):#, rtsd):#, sd_index, sd_grad):
    fig = plt.figure()
    fig, (ax0, ax1, ax4, ax2, ax3) = plt.subplots(nrows=5, figsize=(15,10), num='Current Relative Method'+'  ' + path)
    ax0.plot(atb_mat_2)
    ax0.set_title('Relative Track',fontsize=11)
    ax0.set_ylim([-10,10])
    if len(sd_index)!=0:
        if len(sd_index)>1:
            for i in range(1, len(sd_index)):
                if sd_grad[i]==1:
                    ax0.axvspan(sd_index[i-1],sd_index[i], edgecolor='r', lw=None, alpha=0.1)
    ax1.plot(rtsd)
    ax1.set_title('RT Standard Deviation',fontsize=11)
    ax1.set_ylim([0,250])
    ax4.plot(abs_track_data)
    ax4.set_title('Absolute Track',fontsize=11)
    ax4.set_ylim([3000,5000])
    ax2.plot(splitpo)
    ax2.set_title('Track Split',fontsize=11)
    ax2.set_ylim([0,20])
    ax3.plot(ts)
    ax3.set_title('TS Standard Deviation',fontsize=11)
    ax3.set_ylim([0,100])

    fig.tight_layout()
    plt.show()

非常感谢任何建议,如果这个答案很明显,我很抱歉,因为我是新手。

【问题讨论】:

    标签: python graph matplotlib window figure


    【解决方案1】:

    您可以使用ipython 来完成。

    1. 编写您的脚本并将其保存为(例如)test.py。脚本应该创建一个图形,进行绘图并显示绘图:

      import numpy as np
      import matplotlib.pyplot as plt 
      
      fig = plt.figure()
      x = np.linspace(-1, 1, 100)
      y = np.sin(x)
      plt.plot(x, y)
      plt.show()
      
    2. 使用以下命令启动ipython 控制台:

      ipython --pylab=qt
      

      或者你想使用的任何后端。

    3. ipython shell 中输入:

      %run /path/to/the/test.py
      

      这将创建一个图形,并显示情节。

    4. 然后更改您的脚本。例如将第 5 行更改为:

      x = np.linspace(-0, 2, 100)
      
    5. ipython shell 中重复%run 命令:

      %run /path/to/the/test.py
      

      另一个人物会弹出新的情节。旧图也将可见(这不会删除或替换它)。

    【讨论】:

    • 非常感谢您的帮助,当我实现您所说的内容时,它适用于测试脚本。但是它不适用于我的脚本。请看我的编辑。是因为没有fig = plt.figure()这行吗?
    • @AshleighClayton 首先你有一个额外的数字,你应该删除fig = plt.figure()这一行。但这不是错误,错误是您指定了图形的num,因此它将重用该图形,因为带有num 的图形已经存在。只需删除subplots函数的num参数,一切都会正常。
    • 非常感谢@ViktorKerkez。解决了问题
    猜你喜欢
    • 1970-01-01
    • 2018-11-22
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多