Python 3.9 no Mac com o OS 11.6.1
Eu estou usando o Leitor de classe definida no Gerenciamento dinâmico de plotagem em matplotlib de Animação de módulo para o projeto de uma função, o que cria uma animação que vai ser colocado em um tkinter lona contidos em uma janela de nível superior. Cada quadro da animação consiste de um mapa de calor que aparecem em cima de uma barra correspondente a trama. Um colorbar aparece ao lado o mapa de calor. O heatmap rótulos do eixo são strings armazenadas em canais.
Aqui é a minha função, onde root é a minha principal tkinter janela, rótulos do eixo são armazenados em channels
, M_list
é uma lista de matrizes e bar_list
é uma lista de listas, onde cada lista no bar_list
tem comprimento igual ao número de canais e bar_list
si tem comprimento igual ao número de matrizes.
def heatplot_barplot_animation_combined(root,channels,M_list,bar_list):
num_times=len(M_list)-1
fig, ax = plt.subplots(2)
plot_window = Toplevel(root)
canvas = FigureCanvasTkAgg(fig, master=plot_window)
canvas.draw()
canvas.get_tk_widget().pack(side=TOP,fill=BOTH,expand=1)
def update_graph(i):
ax[0].cla
cbar_ax.cla()
sns.heatmap(ax = ax[0], data = M_list[i], cmap = "coolwarm", cbar_ax =
cbar_ax,vmin=0,vmax=1)
ax[0].set_xticks(range(len(channels)))
ax[0].set_xticklabels(channels,fontsize=10)
ax[0].set_yticks(range(len(channels)))
ax[0].set_yticklabels(channels,fontsize=10)
ax[1].cla()
ax[1].bar(channels,bar_list[i])
ax[1].set_ylim(0, 1)
fig.suptitle('Frame: '+str(i), fontsize=12)
divider = make_axes_locatable(ax[0])
cbar_ax = divider.append_axes("right", size="5%", pad=0.05)
ani = Player(fig, update_graph, maxi=num_times)
Exemplo de implementação para 50 8-por-8 matrizes:
channels=['a','b','c','d','e','f','g','i']
Nc=len(channels)
Nt=50
M_list=[np.random.rand(Nc,Nc) for i in range(Nt)]
bar_list=[[random.uniform(0,1) for i in range(Nc)] for t in range(Nt)]
heatplot_barplot_animation_combined(root,channels,M_list,bar_list)
Os eixos são rotulados, mas os rótulos de cintilação em um chato forma como a animação joga fora.
Por outro lado, se eu mover as quatro linhas, onde eu definir os rótulos de ax[0]
(o mapa de calor), fora a função de atualização e, imediatamente abaixo, a resultante de animação não tremer, mas o heatmap as etiquetas dos eixos são os números 0,1,...,7 e não as entradas dos canais.
Então, eu estou lutando para rotular os eixos corretamente E para eliminar a cintilação.