În cazul în care pentru a pune set_xticks și set_xticklabels în animație, astfel încât să eticheteze corect, fără "pâlpâie timp?"

0

Problema

Python 3.9 pe Mac cu OS 11.6.1

Eu sunt, folosind Player-ul de clasă definite la Gestionarea dinamică trasarea în matplotlib modul de Animație pentru a proiecta o funcție, care creează o animație care va fi plasat pe o tkinter panza conținute într-un Toplevel fereastră. Fiecare cadru al animației constă dintr-un heatmap să apară de mai sus corespunde un bar complot. Un colorbar apare alături de heatmap. Harta etichetele axelor sunt siruri de caractere stocate în canale.

Aici e rolul meu, în cazul în care rădăcina este principala mea tkinter fereastră, etichetele axelor sunt stocate în channels, M_list este o listă de matrice, și bar_list este o listă de liste, unde fiecare listă în bar_list are lungimea egală cu numărul de canale și bar_list în sine are o lungime egală cu numărul de matrici.

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)

Exemplu de implementare pentru 50 8 pe 8 matrici:

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)

Axele sunt etichetate corect, dar etichetele pâlpâie într-un mod enervant ca animațiile.

Pe de altă parte, dacă am muta patru linii unde am pus etichete de ax[0] (harta) în afara funcției de actualizare și imediat sub ea, animația rezultată nu pâlpâie, dar heatmap axe etichetele sunt numerele 0,1,...,7, și nu intrările în canale.

Deci, eu sunt luptă pentru a eticheta axele corect ȘI pentru a elimina pâlpâirea.

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

Cel mai bun răspuns

0

Am rezolvat problema de a nu încerca să stabilească toate ax[0] proprietăți și doar adăugând xticklabels=channels, yticklabels=channels ca opțiuni pentru a sns.heatmap. Încă nu sunt sigur cum de a roti axa y etichete fără a întâmpina pâlpâie totuși. Se pare ca orice axa de proprietate modificate după heatmap introduce pâlpâie timp de un anumit fel.

2021-11-23 17:49:51

În alte limbi

Această pagină este în alte limbi

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