Я новый пользователь Python и совершенно новый пользователь, связанный со средой matplotlib.В следующем коде мне удалось создать анимацию, в которой я читаю некоторые CSV-файлы, и я строю анимированные результаты либо по гистограмме, либо по временной области.Код следующий:
import csv
import matplotlib.pyplot as plt
import numpy as np
import matplotlib
from matplotlib.animation import FuncAnimation, writers, ImageMagickFileWriter
'''
fig, axs = plt.subplots(2,2) #subplots is a module that returns 1 figure with a list of two axes (due to the two in the arguments)
my_data =np.genfromtxt('1b. freq (time domain).csv', delimiter=',',skip_header=1)
my_data_bar =np.genfromtxt('1a.powers_loads_generators (bar_plots).csv', delimiter=',',skip_header=1)
my_data_2=np.genfromtxt('2b.angles (time domain).csv', delimiter=',',skip_header=1)
my_data_bar_2=np.genfromtxt('2a.torques (bar_plots).csv', delimiter=',',skip_header=1)
axs[0][1].set_ylim(49.5, 50.5)
axs[0][1].set_xlim(0, 10)
axs[0][1].set_xlabel('Time (Seconds)')
axs[0][1].set_ylabel('Frequency (Hz)')
frequency_lines = axs[0][1].plot([],[]) # tuple of lines.
######################################################################################################################################################################################################################
axs[0][0].set_xlim(0, 400)
testNames=('G1', 'G2', 'WG1', 'WG3','TOTG','LDA','LDB','LDC','TOTLD')
axs[0][0].invert_yaxis() # labels read top-to-bottom
axs[0][0].set_xlabel('Active Power (MW)')
bar_containers= axs[0][0].barh(range(9),my_data_bar[0,1:], align='center', height=0.5, tick_label=testNames)
bar_containers[4].set_color('r')
bar_containers[8].set_color('r')
######################################################################################################################################################################################################################
axs[1][1].set_ylim(0, 100)
axs[1][1].set_xlim(0, 10)
axs[1][1].set_xlabel('Time (Seconds)')
axs[1][1].set_ylabel('Rotor Angles Difference (rads)')
angle_lines = axs[1][1].plot([],[])
######################################################################################################################################################################################################################
axs[1][0].set_xlim(0,1)
testNames=('Tmech1', 'Tel1', 'Tmech2', 'Tel2')
axs[1][0].invert_yaxis()
axs[1][0].set_xlabel('Torques (pu)')
bar_containers2= axs[1][0].barh(range(4),my_data_bar_2[0,1:], align='edge', height=0.5, tick_label=testNames) #arguments list of position and height and returns a container
######################################################################################################################################################################################################################
totFrames=len(my_data)
def update(index):#receive a variable to understand which frame we take
print ("Update",index)
frequency_lines[0].set_data(my_data[:index+1, :].T)
angle_lines[0].set_data(my_data_2[:index+1,0],my_data_2[:index+1,4])
for i, b in enumerate(bar_containers):
b.set_width(my_data_bar[index,i+1])
for i, b in enumerate(bar_containers2):
b.set_width(my_data_bar_2[index,i+1])
ani = FuncAnimation(fig, update, frames = range(totFrames), interval=1) #how many ms are between the frames
ani.save('visualization.gif', writer='imagemagick')
Мои вопросы: 1) Как я могу добавить некоторые задержки между кадрами?Например, я хотел бы, чтобы переменная интервала в команде FuncAnimation была переменной.Для кадров 0-100 задержка времени, я хотел бы быть 1, для кадров 100-200, я хотел бы, чтобы задержка между кадрами была 600 (чтобы сосредоточиться в этих часовых поясах), а от кадра номер 200 -totFrames задержка между кадрами снова становится равной 1.
2) Когда я сохраняю .ani, я получаю файл .gif, в котором легенды и метки переполняют друг друга.Однако, если я максимизирую анимацию в полноэкранном режиме из Python, тогда сюжеты в Python выглядят нормально.Как я могу сохранить файл анимации в полноэкранном режиме, чтобы файл .gif имел участки, не пересекающиеся друг с другом?
Заранее спасибо