Jupyter笔记本matplotlib笔记本使plot不显示,inline使其不交互

2024-04-25 23:58:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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函数:

^{pr2}$

然而,情节并没有出现,甚至没有一个空白。我尝试在plot_test(s)之前运行%matplotlib inline。这使得情节得以呈现,但同时也摆脱了情节的交互性。在


Tags: 文件函数postestimportplotmatplotlibdef
1条回答
网友
1楼 · 发布于 2024-04-25 23:58:46

更新函数引用ax,这超出了范围。一种解决方案是将更新函数放在plot_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()

然后,保持笔记本部分不变

^{pr2}$

结果是我想要的交互图形。在

enter image description here

相关问题 更多 >