是否可以在 Python (Spyder) 中更新内联图?

wwy*_*yws 6 matplotlib ipython python-3.x spyder

设置:Anaconda 3 (Win10 64)、Spyder 4 和 Python 3.7。IPython Graphics 设置是默认的(内联)。我仍然是 Python 新手,但我环顾四周,到目前为止还没有找到解决我的问题的答案。预先感谢大家。

因此,在此设置中,每当我使用 matplotlib 创建绘图时,它都会出现在 Spyder 的绘图窗格中。例如

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

df = pd.DataFrame(np.random.randint(0,100,size=(100, 1)), columns=list('A'))
bp = df.boxplot(column = 'A')
Run Code Online (Sandbox Code Playgroud)

创建箱线图。现在,如果我想为绘图添加标题,代码将是

bp.set_title("This Title")
Run Code Online (Sandbox Code Playgroud)

这就是我遇到一些问题的地方。如果我一起运行整个块

df = pd.DataFrame(np.random.randint(0,100,size=(100, 1)), columns=list('A'))
bp = df.boxplot(column = 'A')
bp.set_title("This Title")
Run Code Online (Sandbox Code Playgroud)

然后我得到一个以“This Title”为标题的箱线图,显示在绘图窗格中, 这就是我想要的。

但是,如果我在 IPython 控制台中逐行运行上述代码,第二行将按预期生成箱线图,但第三行不会对绘图窗格中的图像产生影响,因此绘图窗格中的图像仍然没有标题

现在,如果我转到“工具”>“首选项”>“IPython 控制台”>“图形”并将图形后端设置为“自动”而不是默认的“内联”,那么当我在控制台中逐行运行代码时,我会得到一个在另一个窗口中弹出的图像,并且它确实根据输入到控制台的新行进行更新/刷新。我知道内联图应该是静态的,但我想我看到了另一篇文章,有人说可以更新内联图?所以现在我的问题是:

  1. 如果图形后端不是像内联那样静态的,绘图是否仅通过 IPython 控制台中的行代码更新/刷新?
  2. 为什么当我运行代码块和逐行运行时得到不同的结果?
  3. 如果可以更新内嵌图(最好是在 Spyder 的绘图窗格中),你会如何做?我尝试了各种方法来重绘绘图,例如
plt.show()
plt.draw()
bp.get_figure().canvas.draw()
Run Code Online (Sandbox Code Playgroud)

但这些都不会更新绘图窗格中的图像。我认为即使我无法更新图像,我至少应该能够重新绘制它(即第二个图像出现在具有更新特征的绘图窗格中)。但到目前为止我所尝试的一切都不起作用。请指教并再次感谢。

Car*_*oba 6

此处为 Spyder 维护者)关于您的问题:

如果图形后端不是像内联那样静态的,绘图是否仅通过 IPython 控制台中的行代码更新/刷新?

正确的。

为什么当我运行代码块和逐行运行时得到不同的结果?

因为当您运行代码单元格(这就是我认为您所说的“代码块”的意思)时,您的绘图显示在该代码的末尾,因此它需要您在中间行中对其进行的所有修改。

如果可以更新内嵌图(最好是在 Spyder 的绘图窗格中),你会如何做?

不,这是不可能的。正如您上面正确提到的,内联图是静态图像,因此无法修改。

  • 没有命令可以做到这一点。您需要在单个文件或单元运行中完成所有操作。 (3认同)