Анимация Matplot, показывающая Ошибка значения из-за ошибки измерения массива - PullRequest
0 голосов
/ 23 марта 2020

У меня проблема с функцией анимации в пакете matplotlib для python. функция, которую я передаю в анимацию, предполагает отображение нескольких графиков на одной фигуре, и после интервала времени каждый график получит N значений для осей X и Y, а затем отобразит график. но через случайное время я получаю эту ошибку:

> Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python38-32\lib\tkinter
    return self.func(*args)
  File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python38-32\lib\tkinter
    func(*args)
  File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python38-32\lib\site-pa
    TimerBase._on_timer(self)
  File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python38-32\lib\site-pa
    ret = func(*args, **kwargs)
  File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python38-32\lib\site-pa
    still_going = Animation._step(self, *args)
  File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python38-32\lib\site-pa
    self._draw_next_frame(framedata, self._blit)
  File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python38-32\lib\site-pa
    self._draw_frame(framedata)
  File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python38-32\lib\site-pa
    self._drawn_artists = self._func(framedata, *self._args)
  File "c:/Users/Lenovo/Desktop/Coding/python/mycode_
    axs[index].plot(oldTimeArray[index], oldDataArray[index])
  File "<__array_function__ internals>", line 5, in atleast_1d
  File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python38-32\lib\site-packages\numpy\core\shape_base.py", line 67, in atleast_1d
    ary = asanyarray(ary)
  File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python38-32\lib\site-packages\numpy\core\_asarray.py", line 138, in asanyarray
    return array(a, dtype, copy=False, order=order, subok=True)
ValueError: cannot copy sequence with size 2066 to array axis with dimension 2000

Я не могу показать вам весь исходный код, но это функция, которую я передаю функции анимации (большая часть):

def animate(frameIndex, Xdata, Ydata):    
 if(Xdata != []):
     axs = [0 for x in range(5)]
     fig.clf()
     fig.clear()
     for index in range(5):
         axs[index] = fig.add_subplot(5, 1, index+1)
         Xdata[index] = Xdata[index][-100:]
         Ydata[index] = Ydata[index][-100:]
         axs[index].plot(Xdata[index], Ydata[index])
     for index in range(5):
         if(index < 4):
             axs[index].get_shared_x_axes().join(axs[index+1], axs[index])
             axs[index].set_xticks([], )
         axs[index].title.set_text("title") 
     plt.xticks(rotation=45, ha='right')
     plt.subplots_adjust(bottom=0.30)
     fig.suptitle("graph")
     fig.tight_layout(rect=[0, 0.03, 1, 0.95])

Я не уверен, поможет ли эта информация или нет, но я использую ее для проекта MQTT, использую библиотеку paho, а Xdata и Ydata поступают из функции обратного вызова после получения данных.

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