You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tkinter嵌入Matplotlib条形图动画y轴刻度标签异常问题求解

解决方案

问题原因

刻度混乱由两个错误用法导致:

  • 帧更新函数中反复调用fig.add_subplot(111),每帧都会生成一个新的子图堆叠在画布上,多帧后多个子图的刻度重叠显示
  • 固定的y轴刻度配置放在帧更新逻辑中,产生大量重复操作

优化方案

所有静态坐标轴配置统一在动画启动前完成,帧更新时仅修改条形高度即可,无需重复创建子图、重复绘制条形图。

修改后完整代码

import numpy as np
from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from tkinter import Tk, TOP, BOTH

root = Tk()
root.geometry('1000x1000')

fig = Figure() 
# 提前创建唯一子图,完成所有静态配置
ax = fig.add_subplot(111)
labels = ['a','b','c','d']
# 一次性设置y轴刻度和范围,仅执行一次
ax.set_yticks(np.arange(0, 1.1, step=0.2))
ax.set_ylim(0, 1)
ax.set_xticks(range(len(labels)))
ax.set_xticklabels(labels)

canvas = FigureCanvasTkAgg(fig, master=root)
canvas.draw()
canvas.get_tk_widget().pack(side=TOP, fill=BOTH, expand=1)

# 生成测试数据
M = np.random.rand(100,4)
num_times = M.shape[0]
# 初始化条形图对象,后续仅更新高度
bars = ax.bar(labels, M[0,:])

def update_bar(i):
    # 逐根更新条形高度
    for bar, height in zip(bars, M[i,:]):
        bar.set_height(height)

ani = Player(fig, update_bar, maxi=num_times)
root.mainloop()

内容的提问来源于stack exchange,提问作者fishbacp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 23:48:03