Python 3.9 na komputerze Mac z SYSTEMEM 11.6.1
Używam klasa Player, określony w dynamicznym zarządzaniu budową w module animacji matplotlib, dla rozwoju funkcji, która tworzy animację, która zostanie umieszczona na płótnie tkinter, znajdującego się w oknie najwyższego poziomu. Każda klatka animacji składa się z map ciepła, pojawiający się nad odpowiednim paskiem. Obok cieplnej kartą pojawi się pasek pasek. Etykiety osi cieplnej karty stanowią wiersze, zapisane w kanałach.
Oto moja funkcja, gdzie root-moje główne okno tkinter, etykiety osi przechowywane w channels
, M_list
jest lista matryc, i bar_list
jest lista list, w którym każda lista w bar_list
ma długość równą ilości kanałów i bar_list
sama w sobie ma długość równą liczbę matryc.
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)
Przykład realizacji dla 50 matryc 8 na 8:
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)
Osi oznaczone poprawnie, ale etykiety produkt drażniący migoczą podczas odtwarzania animacji.
Z drugiej strony, jeśli przesunę cztery wiersze, w których ja ustalam tagi ax[0]
(mapa cieplna) poza funkcją aktualizacji i bezpośrednio pod nią wypadkowa animacja nie miga, ale etykiety osi map ciepła-to liczby 0,1,..., 7,a nie wpisy w kanałach.
Więc ja ze wszystkich sił staram się poprawnie oznaczyć osie I wyeliminować migotanie.