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

Matplotlib子图x/y轴刻度字体设置及y轴刻度自定义问题

问题根因
  • 刻度字体仅最后一个子图生效:循环中调用的plt.xticks()、plt.yticks()属于pyplot全局状态接口,仅对当前最后激活的子图生效,无法作用于遍历过程中的所有子图对象;plt.rcParams全局字体配置需放在绘图逻辑最前端,循环内重复设置无实际效果。
  • y轴固定双刻度需求未实现:原代码未获取直方图的频次统计结果,无法计算目标y轴刻度上限,也未手动指定y轴显示的刻度列表。
修正后可运行代码
import pandas as pd 
import numpy as np
import matplotlib.pyplot as plt

# 全局字体配置放在所有绘图逻辑前
plt.rcParams["font.serif"] = ["Times New Roman"]

xaxes = ['RMSE', 'SMAPE', 'MAPE']
f, a = plt.subplots(3, figsize=(20, 15))
f.subplots_adjust(hspace=0.4)

a = a.ravel()
for idx, ax in enumerate(a):
    # 绘制直方图,接收返回的频次统计、分箱边界、图形补丁对象
    counts, bins, patches = ax.hist(np.random.rand(100, 1), bins=300)
    # 逐个子图设置x、y轴刻度字号
    ax.tick_params(axis='x', labelsize=30)
    ax.tick_params(axis='y', labelsize=30)
    # 计算y轴目标刻度,固定仅显示0和频次最大值取整加1两个值
    y_upper = int(counts.max()) + 1
    ax.set_yticks([0, y_upper])
    # 设置轴标签
    ax.set_xlabel(xaxes[idx], fontsize=30)
    ax.set_ylabel("Frequency", fontsize=30)

plt.show()
关键修改说明
  • 全局字体配置移至代码最前端,删除循环内重复的无效配置项
  • 替换全局状态接口plt.xticks()/plt.yticks()为子图对象专属的ax.tick_params()方法,遍历过程中逐个子图设置刻度字号,保证所有子图配置生效
  • 接收ax.hist()返回的频次统计数组counts,计算得到y轴目标上限值,通过ax.set_yticks()手动指定y轴仅显示要求的两个刻度
  • 所有样式配置均绑定当前循环到的子图实例,彻底解决仅最后一个子图配置生效的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 15:12:24