当前位置: 首页 > 面试题库 >

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

慎望
2023-03-14
问题内容

在有关如何在ipython笔记本中(一个单元内)在循环中动态更新绘图的答案中,给出了一个示例,说明了如何在Python循环内在Jupyter笔记本中动态更新绘图。但是,这可以通过在每次迭代中销毁并重新创建绘图来实现,并且其中一个线程中的注释指出,可以使用新颖的%matplotlib nbagg魔术来改善这种情况,该魔术提供了嵌入在笔记本中的交互式图形,而不是比静态图片

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

要清楚我要的是什么:我想做的是运行一些模拟代码进行几次迭代,然后绘制其当前状态的图,再运行其进行几次迭代,然后更新该图以反映当前状态,依此类推。因此,想法是绘制一个图,然后在用户不进行任何交互的情况下,在不破坏和重新创建整个事物的情况下更新图中的数据。

这是对上面链接的问题的答案进行的一些稍微修改的代码,该代码通过每次重新绘制整个图形来实现。我想达到相同的结果,但使用会更有效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)

我把它放在这里的nbviewer上。

有一个IPython
Widget版本nbagg,目前正在Matplotlib存储库中进行
。如果可以的话,那可能是最好的使用方式nbagg

编辑:更新以显示多个图



 类似资料:
  • 问题内容: 据我所知,可以在一个单元内进行调试。 但是,我有多个单元格之间的函数调用。 例如, 我试过的 我试图在cell-1的第一行中设置。但是它甚至在执行单元2之前就立即进入调试模式。 我试图在代码之前添加该行。但是,代码永远运行,永不停止。 在ipython笔记本中设置断点的正确方法是什么? 问题答案: 使用 ipdb 通过安装 用法: 用于逐行执行和进入函数使用,并退出调试提示使用。 有关

  • 问题内容: 我是redux和es6语法的新手。我使用官方的redux教程和此示例制作了我的应用。 以下是JS代码段。我的观点-在post reducer中定义REQUEST_POST_BODY和RECEIVE_POST_BODY案例。主要困难- 在商店中查找和更新合适的对象。 我尝试使用示例中的代码: 但是它使用了简单的帖子数组。无需按ID查找正确的帖子。 这是我的代码: 问题答案: 如果您想坚持

  • 假设我的RCP项目中有一个类,并且有一个表要在其中显示如下: 这里是项目列表

  • 我在UI中有一个按钮,在OnClick事件处理程序中,我必须运行一个设置间隔计时器。在设置间隔计时器中,我检查一个条件,如果条件满足,我将更新状态,但它不能正常工作。 00); 在倒计时功能中有一个console.log,它总是打印“0 false”,但UI中的组件网正在更新为正确的数字。 你能告诉我为什么吗 控制台中的计数始终为“0”。log 代码沙盒链接:https://codesandbox

  • 我创建了一个元素列表,我想更新其中一个列表元素 这是对update方法的调用: 这是更新方法: 在该方法中,我收到警告“从方法生成函数”,并建议“方法‘update\elem’可能是‘static’” 更新列表元素而不收到警告的正确方法是什么?

  • 我有两个组件,一个包含复选框,另一个是按钮。其目的是前一个组件让我们称之为行,如果复选框被更改,编辑按钮将自动启用,如果复选框不再勾选,编辑按钮将自动禁用。我本来打算添加onclick事件监听器,但最近我读了一些关于状态的文章,认为这可能是一个更好的主意。 这是我的按钮: 这是我的行组件 我的主应用程序呈现可能是这样的 我的意图是,如果单击了复选框,检查所有复选框的状态以确保选中了某些内容,如果选