Как добавить задержки между кадрами и как сохранить GIF-файл в полноэкранном режиме? - PullRequest
0 голосов
/ 22 сентября 2019

Я новый пользователь 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 имел участки, не пересекающиеся друг с другом?

Заранее спасибо

...