Kam dát set_xticks a set_xticklabels v animaci tak, aby štítek správně bez "blikání?"

0

Otázka

Python 3.9 na Mac s OS 11.6.1

Používám Přehrávač třídy definované v Řízení dynamické vykreslování v matplotlib Animace modul navrhnout funkce, která vytváří animaci, která bude umístěna na tkinter plátno obsažené v Toplevel okna. Každý snímek animace se skládá z heatmap objevují výše odpovídající baru pozemku. S colorbar, objeví se vedle uvedená tepelná mapa. Tepelná mapa, uvedená popisky osy jsou struny uloženy v kanálech.

Tady je moje funkce, kde root je můj hlavní tkinter okna, popisky osy jsou uloženy v channels, M_list je seznam matic, a bar_list je seznam seznamů, kde každý seznam v bar_list má délku, která se rovná počtu kanálů a bar_list sám má délku, která se rovná počtu matric.

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)

Ukázka realizace pro 50 8-by-8 matice:

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)

Osy jsou označeny správně, ale popisky blikání v nepříjemné způsobem jako animace se hraje.

Na druhou stranu, pokud jsem se přesunout na čtyři řádky, kde jsem nastavit štítky ax[0] (heatmap) mimo funkci aktualizace a bezprostředně pod ním, výsledná animace není blikání, ale heatmap osy, popisky jsou čísla 0,1,...,7, a nikoliv položky v kanálech.

Takže, mám problém označit osy správně A eliminovat blikání.

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

Nejlepší odpověď

0

Vyřešil jsem problém tím, že se snaží nastavit všechny ax[0] vlastnosti a jen přidávat xticklabels=channels, yticklabels=channels jako možnosti sns.heatmap. Pořád si nejsem jistý, jak otočit y-osy, popisky, aniž by se setkávat blikání. Zdá se, jako každá osa vlastnictví upravený po heatmap zavádí blikání nějakého druhu.

2021-11-23 17:49:51

V jiných jazycích

Tato stránka je v jiných jazycích

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