在那里把set_xticks和set_xticklabels在动画以标正确无"闪烁?"

0

的问题

蟒蛇3.9on Mac OS11.6.1

我使用的播放器类定义在 管理动态绘图matplotlib画模块 设计的一个功能,它创建了一个动画,将被放置在一个tkinter帆布包含在顶层的窗口。 每个帧画由一个热图中出现的上一个相应条的情节。 一个色条旁边出现的热图. 热图轴标签串存在的通道。

这是我的功能,在那里根是我的主要tkinter窗口,轴标签的储存在 channels, M_list 列出的矩阵, bar_list 是一个列表,其中每一列表中的 bar_list 具有长度相等的数量和频道 bar_list 本身具有长度相等的数量的矩阵。

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-通过-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)

轴标正确,但标注闪烁在一个恼人的方式播放动画出来。

另一方面,如果我移动的四个线在哪里我设置的标签 ax[0] (热图)之外,更新的功能,并立即下,所产生的动画不会闪烁,但热图轴上标签字的0,1,...,7和没有条目的频道。

因此,我是在挣扎着标签的轴正确和消除闪烁。

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

最好的答案

0

我解决了这个问题由不试图设置的所有 ax[0] 性只是增加 xticklabels=channels, yticklabels=channels 作为选择 sns.heatmap. 我还是不知道该如何转动我y轴上标签,而不会遇到闪烁。 似乎任何轴的酒店之后修改的热图引入了闪烁的某种。

2021-11-23 17:49:51

其他语言

此页面有其他语言版本

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