Python Jupyter笔记本matplotlib笔记本使绘图不显示,内联使绘图不交互

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

我有一个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_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语句,它就不会显示。另外,在你提到的问题中,出现了一个空白,对我来说并非如此。你的笔记本可能配置为自动加载内联后端。这种情况似乎经常发生(尽管我不知道为什么会这样)。