Изменения оси в интерактивном режиме ion() в matplotlib игнорируются — проблема с областью действия?

#python #axis #python-interactive

#python #ось #python-интерактивный

Вопрос:

Я хотел бы создать график из массива данных, который растет со временем. Я нашел ion(), чтобы перерисовать мой график, добавив новые точки. Теперь добавление новой точки должно стереть старую, и для достижения этого мне пришлось добавить clf() . Это снова означает, что я должен сбрасывать свои изменения оси каждый раз, когда я строю график, но он игнорирует все изменения, которые зависят от дескриптора оси. Мне было интересно, является ли это проблемой области действия из-за функции, которую я вызываю? Я новичок в python и также был бы признателен за обратную связь, если существует более простой подход, чем выбранный.

Я попытался передать дескриптор оси через различные функции в надежде, что это что-то изменит, но безуспешно.

 import matplotlib.pyplot as plt
import matplotlib.ticker as tck
from time import time

x, y = [], []
counter = 0
plt.ion()
fig, ax1 = plt.subplots()      # ax1 is not used

def axis(ax):
    ax.set_label("Time [s]")
    ax.yaxis.set_major_locator(tck.MultipleLocator(base=0.5))

def plot():
    plt.clf()
    ax = plt.gca()
    axis(ax)
    if len(y) < 3:
        plt.plot(x, y, c='r')
    else:
        plt.plot(x[-3:], y[-3:], c='r')
    plt.draw()
    return ax


for i in range(0,10):
    x.append(time())
    y.append(counter)
    print(i, 'n')
    ax = plot()
    counter  =1
    plt.pause(1)
  

Ответ №1:

Передача ax не требуется. Замена plt.clf() на ax1.clear() решила проблему.