Python Jupyter笔记本matplotlib笔记本使绘图不显示,内联使绘图不交互
我有一个python文件Python Jupyter笔记本matplotlib笔记本使绘图不显示,内联使绘图不交互,python,python-3.x,matplotlib,jupyter-notebook,Python,Python 3.x,Matplotlib,Jupyter Notebook,我有一个python文件Vis.py,其中包含以下两个函数: import matplotlib.pyplot as plt from matplotlib.widgets import Slider def update(val): #needed for slider function of plot_test pos = spos.val ax.axis([pos,pos+10,-1,1]) fig.canvas.draw_idle() def plot_tes
Vis.py
,其中包含以下两个函数:
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider
def update(val): #needed for slider function of plot_test
pos = spos.val
ax.axis([pos,pos+10,-1,1])
fig.canvas.draw_idle()
def plot_test(data):
fig, ax = plt.subplots()
plt.subplots_adjust(bottom=0.25)
plt.plot(data)
plt.axis([0, 10, -1, 1])
axcolor = 'lightgoldenrodyellow'
axpos = plt.axes([0.2, 0.1, 0.65, 0.03], facecolor=axcolor)
spos = Slider(axpos, 'Pos', 0.1, 90.0)
spos.on_changed(update)
plt.show();
我试图在一个单独的ipynb文件中使用plot_test函数:
%matplotlib notebook
from Vis import *
import numpy as np
t = np.arange(0.0, 200.0, 0.1)
s = np.sin(2*np.pi*t)
plot_test(s)
然而,情节没有出现,甚至没有一个空白。在
plot\u测试之前,我尝试运行%matplotlib inline
。这使得绘图显示出来,但它也消除了绘图的交互性。更新函数引用了ax
,这超出了范围。解决方案是将更新函数放入plot\u test
函数中
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider
def plot_test(data):
fig, ax = plt.subplots()
plt.subplots_adjust(bottom=0.25)
plt.plot(data)
plt.axis([0, 10, -1, 1])
axcolor = 'lightgoldenrodyellow'
axpos = plt.axes([0.2, 0.1, 0.65, 0.03], facecolor=axcolor)
spos = Slider(axpos, 'Pos', 0.1, 90.0)
def update(val): #needed for slider function of plot_test
pos = spos.val
ax.axis([pos,pos+10,-1,1])
fig.canvas.draw_idle()
spos.on_changed(update)
plt.show()
然后,保持笔记本部分不变
%matplotlib notebook
from Vis import *
import numpy as np
t = np.arange(0.0, 200.0, 0.1)
s = np.sin(2*np.pi*t)
plot_test(s)
结果为我提供了所需的交互式图形
它对我很管用;尽管要获得交互式滑块,您需要在更新函数中定义ax
。最好使update
成为plot\u test()
的一部分,这样ax
就可以在名称空间中访问。所以你可以使用底部的滑块,按原样使用我的代码?关于更新函数,我同意你的看法,但是更新函数在整个互联网上都被使用,就像我的例子一样(,)。如果你能提供一个明确的例子,说明update函数是plot\u test()
函数的一部分,并以交互方式工作,我很乐意接受它作为答案。太好了,谢谢!要补充的一点是:对我来说,绘图仍然没有显示,但在Vis import*
行的之后第二次添加%matplotlib notebook
为我解决了这个问题。可能对将来的某个人有所帮助。此时您不使用新内核,即如果以前使用过内联后端,则将行更改为笔记本
,但没有重新启动内核。看,不,不是这样的。我去掉了内联语句并重新启动了内核,但如果没有第二条%matplotlib notebook语句,它就不会显示。另外,在你提到的问题中,出现了一个空白,对我来说并非如此。你的笔记本可能配置为自动加载内联后端。这种情况似乎经常发生(尽管我不知道为什么会这样)。