Gdzie umieścić set_xticks i set_xticklabels w animację, aby prawidłowo oznaczyć bez "migotania"?

0

Pytanie

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.

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

Najlepsza odpowiedź

0

Ja rozwiązałem problem, nie próbując zainstalować wszystko ax[0] właściwości i proste dodawanie xticklabels=channels, yticklabels=channels jako opcji sns.heatmap. Jednak nadal nie jestem pewien, jak obracać etykiety na osi y, nie napotykając blask. Wygląda na to, że każda właściwość osi zmienia się po tym, jak mapa cieplna wprowadza jakieś migotanie.

2021-11-23 17:49:51

W innych językach

Ta strona jest w innych językach

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