Python и Matplotlib модуль Animation (авто обновление графики)

preview_player
Показать описание
Python и Matplotlib модуль Animation (авто обновление графики). На простом примере показано, как создать

Ссылки на предыдущие видео по теме:
Видео 1: Python настройка рабочего пространства, использование PyCharm
Видео 2: Python функции
Видео 3: Python классы
Видео 4: Графический интерфейс Qt для Python, или PyQt
Видео 5: Python компиляция программ, cx_Freeze и другие компиляторы
Видео 6.1: Библиотека Matplotlib создание графиков для анализа данных
Видео 6.2: Библиотека matplotlib и Qt встраивание графиков в графический интерфейс Qt
Рекомендации по теме
Комментарии
Автор

# -*- coding: utf-8 -*-

from matplotlib.animation import FuncAnimation
from matplotlib import pyplot as plt

def set_test_data():
'''
Подготовка тестовых данных для анимации
'''
test_file_path =
file_content = open(test_file_path, 'r', encoding = 'utf-8')
red_data = file_content.readlines()
file_content.close()

#print(red_data)

if len(red_data) > 0:
header = None
for line in range(len(red_data)):
if line == 0:
red_data[line] = red_data[line].replace(' ', '')
header = (red_data[line].replace('\n', '')).split(';')
#print(header)

x_column = None
y_column = None

for position in range(len(header)):
if header[position].lower() == 'x':
x_column = position
if header[position].lower() == 'y':
y_column = position

#print(str(x_column)+' _ '+str(y_column))
test_list = None

if line > 0:
x_list = []
y_list = []
for line in range(1, len(red_data)):
red_data[line] = red_data[line].replace(' ', '')
data_line = (red_data[line].replace('\n', '')).split(';')
#print(data_line)
if len(header) > 0:
for x in range(len(header)):
#print(data_line[x_column])

#print(data_line[x_column])

test_list = [x_list, y_list]

return test_list

class
'''
Класс имеющий возможность оперировать функциями анимации
на вход подается рисунок, ссылка на экземпляр линии функции, которые определяются как атрибуты.
В конструкторе объекта
'''
def __init__(self, fig, axes, plot_instance):
self.fig = fig
self.axes = axes
self.plot_instance = plot_instance
#Проверка объекта ссылки на линию

'''
animation - Подается рисунок, на котором анимируется объект, заем подается порядок изменения функции,
обеспечивающей перерисовку данных во времени, посредством (метод plot_animation)
init_func - начальный вариант функции
interval - Интервал через который вызывается метод (время в милисекундах мсек = 0.001 сек.)
'''
print(1)
FuncAnimation.__init__(self, self.fig, self.animate_my_plot, init_func=self.init_plot, frames=2,
interval=800)


def animate_my_plot(self, i):
# Вывод тестовых данных
data_to_animate = set_test_data()
x, y = data_to_animate
#print(str(x)+'_список содержит данные для замены x из метода animate_my_plot')
self.plot_instance.set_data(x, y)
print(3)

def init_plot(self):
'''
Создаем начальное значение функции
'''
print(2)
self.plot_instance.set_data([], [])


def
#Проверка содержимого объекта
print(self.plot_instance)

if __name__ == '__main__':
# Создание рисунка
fig = plt.figure()
# Создание осей
ax = plt.axes(xlim=(-10, 20), ylim=(-10, 30))
# создание объекта plot и присваивание ссылки на объект
plot_instance, = ax.plot([], [], lw=2)

# Создание объекта который управляет анимацией графиков, на вход подается рисунок, ссылка на оси, ссылка на линию (plot)
instance_of_animation_class = MyPlotAnimation(fig=fig, axes=ax, plot_instance=plot_instance)

print('aftershock 4')

plt.show()

PyScientist