Как обновить сюжет между пользовательскими входами? - PullRequest
0 голосов
/ 12 февраля 2020

Я пытаюсь отобразить несколько графиков в одном окне Matplotlib. Я хочу, чтобы следующий график появился после ввода пользователя. Код, который я использую, основан на здесь .

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import jn # Import Bessel function.
def handle_close(evt):
    global closed
    closed = True

fig = plt.figure()
closed = False

def waitforbuttonpress():
    while plt.waitforbuttonpress(0.2) is None:
        if closed:
            return False
    return True

fig.canvas.mpl_connect('close_event', handle_close)

r = np.linspace(0,20,101)
plt.ion()

for n in range(10):
    plt.plot(r, jn(n,r))                  # Draw nth Bessel function.
    plt.title("Bessel function J[%d](r)." % n)
    plt.show()
    fig.canvas.flush_events()
    if not waitforbuttonpress():
        break # Exit loop if user presses a key.
    #plt.cla()                               # Clear axes for next plot.

Проблема в том, что график не обновляется после нажатия клавиши. Что я делаю не так?

1 Ответ

0 голосов
/ 12 февраля 2020

Попробуйте plt.gca().clear()

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import jn # Import Bessel function.
def handle_close(evt):
    global closed
    closed = True

fig = plt.figure()
closed = False

def waitforbuttonpress():
    while plt.waitforbuttonpress(0.2) is None:
        if closed:
            return False
    return True

fig.canvas.mpl_connect('close_event', handle_close)

r = np.linspace(0,20,101)
plt.ion()

for n in range(10):
    plt.gca().clear()
    plt.plot(r, jn(n,r))                  # Draw nth Bessel function.
    plt.title("Bessel function J[%d](r)." % n)
    plt.show()
    fig.canvas.flush_events()
    if not waitforbuttonpress():
        break # Exit loop if user presses a key.
    #plt.cla()

------------- edit --------------

Поскольку ax.cla() не работает для вас, вы также можете попробовать:

for n in range(10):
    # plt.gca().clear()
    lines = plt.plot(r, jn(n,r))                  # Draw nth Bessel function.
    plt.title("Bessel function J[%d](r)." % n)
    plt.show()
    fig.canvas.flush_events()
    if not waitforbuttonpress():
        break # Exit loop if user presses a key.
    # plt.cla()
    lines.pop(0).remove()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...