gpt4 book ai didi

python - 目前在 Jupyter/iPython 中动态更新绘图的正确方法是什么?

转载 作者:IT老高 更新时间:2023-10-28 21:34:50 29 4
gpt4 key购买 nike

how to dynamically update a plot in a loop in ipython notebook (within one cell) 的回答中,给出了一个示例,说明如何在 Python 循环中动态更新 Jupyter 笔记本中的绘图。但是,这是通过在每次迭代时破坏和重新创建绘图来实现的,并且其中一个线程中的注释指出,可以通过使用新的 %matplotlib nbagg 魔法来改善这种情况,该魔法提供嵌入在笔记本中的交互式图形,而不是静态图像。

然而,据我所知,这个美妙的新 nbagg 功能似乎完全没有文档记录,而且我找不到如何使用它来动态更新绘图的示例。因此我的问题是,如何使用 nbagg 后端有效地更新 Jupyter/Python 笔记本中的现有绘图? 由于在 matplotlib 中动态更新绘图通常是一个棘手的问题,一个简单的工作示例将是一个巨大的帮助。指向有关该主题的任何文档的指针也将非常有帮助。

要明确我的要求:我要做的是运行一些模拟代码进行几次迭代,然后绘制其当前状态的图,然后再运行几次迭代,然后更新绘制以反射(reflect)当前状态,依此类推。所以我们的想法是绘制一个绘图,然后在不与用户进行任何交互的情况下更新绘图中的数据,而不会破坏和重新创建整个事物。

这里是上面链接问题的答案中的一些稍微修改的代码,它通过每次重新绘制整个图形来实现这一点。我想获得相同的结果,但使用 nbagg 更有效。

%matplotlib inline
import time
import pylab as pl
from IPython import display
for i in range(10):
pl.clf()
pl.plot(pl.randn(100))
display.display(pl.gcf())
display.clear_output(wait=True)
time.sleep(1.0)

最佳答案

这是一个循环更新绘图的示例。它会更新图中的数据,并且不会每次都重绘整个图。它确实会阻止执行,但如果您有兴趣运行一组有限的模拟并将结果保存在某处,那么这对您来说可能不是问题。

%matplotlib notebook

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

def pltsin(ax, colors=['b']):
x = np.linspace(0,1,100)
if ax.lines:
for line in ax.lines:
line.set_xdata(x)
y = np.random.random(size=(100,1))
line.set_ydata(y)
else:
for color in colors:
y = np.random.random(size=(100,1))
ax.plot(x, y, color)
fig.canvas.draw()

fig,ax = plt.subplots(1,1)
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_xlim(0,1)
ax.set_ylim(0,1)
for f in range(5):
pltsin(ax, ['b', 'r'])
time.sleep(1)

I put this up on nbviewer here.

有一个 IPython Widget version of nbagg that is currently a work in progress at the Matplotlib repository .如果可用,那可能是使用 nbagg 的最佳方式。

编辑:更新以显示多个图

关于python - 目前在 Jupyter/iPython 中动态更新绘图的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34486642/

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