Jupyter Notebook matplotlib notebook не отображает сюжет, встроенный делает его не интерактивным - PullRequest
0 голосов
/ 07 мая 2019

У меня есть один файл 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();

, и я пытаюсь использовать функцию plot_test в отдельном файле ipynb:

%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)

Тем не менее, сюжет не появляется, даже пустое белое пространство.Я пытался запустить %matplotlib inline до plot_test(s).Это заставляет сюжет проявляться, но также избавляет от интерактивности сюжета.

1 Ответ

1 голос
/ 07 мая 2019

Функция обновления ссылается на 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()

Затем, если оставить блокнот неизменным,

%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)

даст мне желаемую интерактивную фигуру для меня.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...