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

Matplotlib中Y轴字体增大失败,求解决方案(附代码)

解决Matplotlib Y轴字体无法增大的问题

问题根源

你的代码中,动画函数grafico_1和grafico_2每次执行都会重新绘制条形图,但未设置Y轴字体,且每次绘制前未清除原有轴内容——即使之前设置过字体,也会被新绘制的元素覆盖。另外,图表figsize=(10, 0.5)的高度过小,也会导致Y轴标签显示不明显。

修复方案

  1. 初始化时配置轴字体:创建子图后直接设置Y轴字体大小,避免动画更新时重复操作。
  2. 动画更新前清除轴内容:用b1.clear()和b2.clear()清除原有元素,防止重叠并确保字体设置生效。
  3. 调整图表高度:适当增大figsize的高度,给Y轴标签足够显示空间。

修改后的完整代码

import tkinter as tk 
import matplotlib.pyplot as plt 
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg 
from matplotlib import animation 
import random

# 创建Tkinter窗口
root = tk.Tk() 
root.geometry('1200x600')  # 调整窗口尺寸适配图表

# 创建图表,增大高度以便显示Y轴字体
fig1, b1 = plt.subplots(figsize=(10, 2), dpi=80)
# 初始化Y轴字体大小
b1.tick_params(axis='y', labelsize=14)

fig2, b2 = plt.subplots(figsize=(10, 2), dpi=80)
b2.tick_params(axis='y', labelsize=14)

def grafico_1(i):
    global b1
    x = []
    y_fix = []
    ws = ['WIRE']

    for _ in range(1, 6):
        nume = random.randint(1, 10)
        x.append(nume)

    # 清除原有轴内容,避免重叠
    b1.clear()
    # 清除后重新设置Y轴字体
    b1.tick_params(axis='y', labelsize=14)

    # 绘制第一层条形
    if int(x[0]) < 3:
        b1.barh(ws, int(x[0]), color='green')
        y_fix.append(int(x[0]))
    elif 3 <= int(x[0]) < 6:
        b1.barh(ws, int(x[0]), color='yellow')
        y_fix.append(x[0])
    else:
        b1.barh(ws, int(x[0]), color='red')
        y_fix.append(x[0])

    # 绘制后续层条形
    for c in x[1:]:
        if int(c) < 3:
            b1.barh(ws, int(c), color='green', left=y_fix)
        elif 3 < int(c) < 5:
            b1.barh(ws, int(c), color='yellow', left=y_fix)
        else:
            b1.barh(ws, int(c), color='red', left=y_fix)
        # 更新left参数,简化列表操作
        y_fix[0] += int(c)

def grafico_2(i2):
    global b2
    x2 = []
    y_fix2 = []
    ws2 = ['line 2']

    for _ in range(1, 6):
        nume2 = random.randint(1, 10)
        x2.append(nume2)

    # 清除原有轴内容
    b2.clear()
    # 重新设置Y轴字体
    b2.tick_params(axis='y', labelsize=14)

    # 绘制第一层条形
    if int(x2[0]) < 3:
        b2.barh(ws2, int(x2[0]), color='green')
        y_fix2.append(int(x2[0]))
    elif 3 <= int(x2[0]) < 6:
        b2.barh(ws2, int(x2[0]), color='yellow')
        y_fix2.append(x2[0])
    else:
        b2.barh(ws2, int(x2[0]), color='red')
        y_fix2.append(x2[0])

    # 绘制后续层条形
    for c2 in x2[1:]:
        if int(c2) < 3:
            b2.barh(ws2, int(c2), color='green', left=y_fix2)
        elif 3 < int(c2) < 5:
            b2.barh(ws2, int(c2), color='yellow', left=y_fix2)
        else:
            b2.barh(ws2, int(c2), color='red', left=y_fix2)
        # 更新left参数
        y_fix2[0] += int(c2)

# 创建动画
ani1 = animation.FuncAnimation(fig1, grafico_1, interval=3000, frames=100) 
ani2 = animation.FuncAnimation(fig2, grafico_2, interval=3000, frames=100)

# 将图表嵌入Tkinter窗口
canvas1 = FigureCanvasTkAgg(fig1, master=root) 
canvas1.get_tk_widget().place(x=50, y=50)

canvas2 = FigureCanvasTkAgg(fig2, master=root) 
canvas2.get_tk_widget().place(x=50, y=200)

root.mainloop()

关键修改说明

  • tick_params(axis='y', labelsize=14):直接设置Y轴刻度标签的字体大小,由于clear()会重置轴配置,所以清除轴后需要再次调用。
  • b1.clear():每次动画更新前清除轴内容,避免多次绘制的条形图重叠,确保字体设置能正常生效。
  • 调整图表和窗口尺寸:原图表高度仅0.5,Y轴标签几乎无法显示,增大到2后可正常展示;同时调整Tkinter窗口大小,让图表完整显示。
  • 简化y_fix逻辑:将原有复杂的列表清空、重新创建操作简化为直接累加列表第一个元素,提升代码简洁性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 07:48:11