图没有在 Jupyter 笔记本中使用 Matplotlib 填充交互式绘图中的画布

Posted

技术标签:

【中文标题】图没有在 Jupyter 笔记本中使用 Matplotlib 填充交互式绘图中的画布【英文标题】:Figure doesn't fill canvas in interactive plot with Matplotlib in Jupyter notebook 【发布时间】:2020-08-13 18:26:22 【问题描述】:

我正在尝试做这样的事情来仔细查看我的数据:

What is the currently correct way to dynamically update plots in Jupyter/iPython?

或者在这里: https://nbviewer.jupyter.org/gist/branning/c8e63ce81be0391260b1

这是我的代码:

%matplotlib notebook
from matplotlib import pyplot as plt
import pandas as pd

START = DATA.index[0]
END = DATA.index[-1]
DT = "6H"

DATERANGE = pd.date_range(START, END, freq=DT)

fig, ax = plt.subplots(figsize(8, 6))
since = DATERANGE[0]
for till in DATERANGE[1:]:
    data = DATA['SOME_SERIES'].loc[since:till]
    if len(data) > 0:
        if ax.lines:
            ax.lines[0].set_xdata(data.index)
            ax.lines[0].set_ydata(data)
        else:
            ax.plot(data.index, data)
        upper, lower = data.min()*0.9, data.max()*1.1
        if not (isnan(upper) or isnan(lower)):
            ax.set_ylim((data.min()*0.9, data.max()*1.1))
        ax.set_xlim((data.index[0], data.index[-1]))
        fig.canvas.draw()
    time.sleep(2)
    since = till

我的问题是,虽然情节正在更新,但它并没有填满画布(希望我在那里得到了术语),但只有大约四分之一的大小。 它看起来像这样:

Plot while looping

只有当循环结束时,情节才会变大:

Plot after looping

上面链接中的确切代码也是如此。

我更新了 jupyter 和 matplotlib,我尝试了 fig.tight_layout(),我还尝试了 %matplotlib notebook %matplotlib nbagg,但这也没有成功..

有人对此有解决方案吗?

谢谢, 菲利普

【问题讨论】:

问题发生时,我正在通过 Microsoft 远程桌面在家工作。现在我在办公室,它的工作就像一个魅力......我在哪里抱怨? :-D 【参考方案1】:

对我来说,这是在我的 Mac 上工作时的一个问题。对此有一个未解决的问题;现在看来最好的解决方案是split the code into two cells。该解决方案的无耻交叉复制:

# Cell 1
%matplotlib notebook
# OR: %matplotlib widget
import matplotlib.pyplot as plt
import numpy as np
import time

fig = plt.figure()

# Cell 2
for j in range(10):       
    plt.plot(range(0, j), [1/(i+1) for i in range(0, j)])
    fig.canvas.draw()
    time.sleep(.1)

或者,可以选择“内联”后端。当然,那个不是交互式的,而且有点难看。见this thread

【讨论】:

以上是关于图没有在 Jupyter 笔记本中使用 Matplotlib 填充交互式绘图中的画布的主要内容,如果未能解决你的问题,请参考以下文章

Python:安装了 Anaconda,但无法在 Jupyter 笔记本中导入 numpy 或 matplotlib

在 Sphinx 文档中嵌入绘图图

如何在 python 循环中更新 matpplotlib 库图,该图位于 Jupyter 笔记本中的同一位置?

在 jupyter notebook 中使用 plotly python 绘制具有不等热图的交互式树状图

如何使 Jupyter Notebook 中的内联图更大? [复制]

没有Jupyter笔记本的Python ggplot(ggpy)?