#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() решила проблему.