Set_xtıcks ve set_xtıcklabels animasyonda "titremeden" doğru şekilde etiketlenecek şekilde nereye koyulur?"

0

Soru

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.

animation matplotlib python tkinter
2021-11-23 15:14:49
1

En iyi cevabı

0

Her şeyi ayarlamaya çalışmayarak sorunu çözdüm. ax[0] özellikler ve sadece ekleme xticklabels=channels, yticklabels=channels seçenekler olarak sns.heatmap. Yine de, y ekseni etiketlerimi titremeyle karşılaşmadan nasıl döndüreceğimden hala emin değilim. Isı haritası bir çeşit titreme getirdikten sonra değiştirilen herhangi bir eksen özelliği gibi görünüyor.

2021-11-23 17:49:51

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................