OS 11.6.1 ile Mac'te Python 3.9
Bir Üst Düzey pencerede bulunan bir tkinter tuvaline yerleştirilecek bir animasyon oluşturan bir işlev tasarlamak için matplotlib Animasyon modülünde dinamik çizimi yönetmede tanımlanan Player sınıfını kullanıyorum. Animasyonun her karesi, karşılık gelen bir çubuk çiziminin üzerinde görünen bir ısı haritasından oluşur. Isı eşleminin yanında bir renk çubuğu belirir. Isı haritası ekseni etiketleri kanallarda depolanan dizelerdir.
İşte benim işlevim, kökün ana tkinter pencerem olduğu, eksen etiketlerinin depolandığı yer channels
, M_list
matrislerin bir listesidir ve bar_list
bu, her listenin bulunduğu listelerin bir listesidir. bar_list
kanal sayısına eşit uzunluğa sahiptir ve bar_list
kendisi matrislerin sayısına eşit bir uzunluğa sahiptir.
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)
50 8'e 8 matris için örnek uygulama:
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)
Eksenler doğru şekilde etiketlenir, ancak animasyon oynatılırken etiketler can sıkıcı bir şekilde titrer.
Öte yandan, etiketleri belirlediğim dört satırı hareket ettirirsem ax[0]
(ısı haritası) update işlevinin dışında ve hemen altında, sonuçta ortaya çıkan animasyon titremez, ancak ısı haritası eksen etiketleri 0,1, sayılarıdır...,7 ve kanallardaki girişler değil.
Bu yüzden eksenleri doğru etiketlemek VE titremeyi ortadan kaldırmak için uğraşıyorum.