图没有在 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
如何在 python 循环中更新 matpplotlib 库图,该图位于 Jupyter 笔记本中的同一位置?
在 jupyter notebook 中使用 plotly python 绘制具有不等热图的交互式树状图