gpt4 book ai didi

python - Matplotlib 重用由另一个脚本创建的图形

转载 作者:太空宇宙 更新时间:2023-11-03 10:55:05 24 4
gpt4 key购买 nike

我在 MacOS 上使用 Matplotlib 和 Sulime Text。我使用 Python 3.5Matplotlib 2.0

当我处理图形时,我通常有一个脚本来绘制数据,并使用 plt.savefig() 将图形保存在 .pdf 文件中。然后我使用 Skim(pdf 查看器)以便在每次修改和运行脚本时刷新文件。这允许我将我的工作布局设置为干净:脚本有一个窗口,图形有一个窗口,它会自动刷新。

我想保持相同的布局,但使用 Matplotlib 图形(因为它们是交互式的)。我正在寻找一种使用 plt.show() 的方法,但总是在我第一次运行脚本时创建的同一个图中

例如:

1。第一次运行

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.figure()

noise = np.random.rand(1, 100)
ax(noise)
plt.show()

2。以下运行

import matplotlib.pyplot as plt
import numpy as np

# This is the super command I am looking for
fig = plt.get_previous_run_figure()
ax = fig.axes

noise = np.random.rand(1, 100)
ax.plot(noise)
plt.draw()

当然,在那种情况下,我将不得不与主脚本分开执行首次运行的脚本。有谁知道这是否可能?

最佳答案

您希望多个连续的 python session 共享一个公共(public) Matplotlib 窗口。我看不出有什么办法可以从不同的进程中共享这个窗口,尤其是当原始所有者可能随时终止时。

但是,您可以执行类似于当前工作流程的操作,在该工作流程中,您有一个外部 pdf 查看器来查看您从多个 python 实例更新的输出文件。

请参阅有关如何腌制 matplotlib 图的问题/答案: Store and reload matplotlib.pyplot object

在每个脚本中,将您的 matplotlib 图输出为腌制对象,而不是调用 plt.show():

import matplotlib.pyplot as plt
import numpy as np
import pickle

ax = plt.subplot(111)
x = np.linspace(0, 10)
y = np.exp(x)
plt.plot(x, y)
pickle.dump(ax, file('myplot.pickle', 'w'))

然后,启动一个专用的 python session ,它加载这个腌制对象并调用 plt.show()。让这个脚本循环运行,检查磁盘上腌制文件的更新,并在必要时重新加载:

import matplotlib.pyplot as plt
import pickle

while True:
ax = pickle.load(file('myplot.pickle'))
plt.show()

备选

我通常没有单独的 python session ,而是有一个运行不同脚本的 Ipython session 。通过选择相同的图形窗口,我最终得到了与您描述的基本相似的设置,其中全天重复使用相同的图形窗口。

import matplotlib.pyplot as plt

fig = plt.figure(0)
fig.clf()

plt.show()

关于python - Matplotlib 重用由另一个脚本创建的图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42367523/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com