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

Python绘图保存为PDF后标签不显示的问题求助

解决Matplotlib保存PDF时大字体标签显示异常问题

问题现象

使用Matplotlib绘制图表并设置大字体后,保存为PDF格式时坐标轴标签无法正常显示(被裁剪或渲染异常)。

原代码问题分析

  1. 重复创建figure对象,导致绘图上下文混乱
  2. 多次调用plt.xticks,覆盖之前的设置,引发字体和刻度的冲突
  3. 保存PDF时未设置bbox_inches='tight',大字体标签超出画布范围被裁剪
  4. 字体设置分散,同时使用字典参数和rcParams,易出现优先级冲突

修复后的代码

import numpy as np
import matplotlib.pyplot as plt

# 全局参数统一配置
plt.rcParams.update({
    "font.family": "Times New Roman",
    "font.size": 35,
    "axes.linewidth": 0.5,
    "xtick.major.width": 0.5,
    "ytick.major.width": 0.5
})

lw = 2.5
b = [16.72,22.27,16.24,13.69,16.64,33.46,10,22.11,35.79,32.53,25.,34,48.66,30.30,41.73]
a = [8.4, 6.6, 5.2, 4.0, 4.9, 10.9, 5.6, 5.2, 10.1, 7.1, 5.2, 9.1, 27.7, 6.5, 10.0]

# 创建单个画布和坐标轴对象
fig, ax = plt.subplots(figsize=(14,7.2))  
ax.plot(b, '-ob', linewidth=lw)

# 一次性配置x轴刻度、标签与旋转
xtick_positions = np.arange(15)
xtick_labels = [f"{val}" for val in a]
ax.set_xticks(xtick_positions)
ax.set_xticklabels(xtick_labels, rotation=90)

# 配置y轴刻度与标签
ax.set_yticks([15,30,45])
ax.set_yticklabels(["15", "30", "45"])

# 设置坐标轴标签
ax.set_xlabel('Percentage load (%)')
ax.set_ylabel('Energy (%)')

# 设定轴范围
ax.set_ylim(5, 50)
ax.set_xlim(0, 14)

# 保存PDF:bbox_inches='tight'防止标签被裁剪,pad_inches调整边距
plt.savefig('file.pdf', dpi=300, bbox_inches='tight', pad_inches=0.1, format='pdf')
plt.show()

关键修复点

  • 统一参数配置:用plt.rcParams.update()集中设置字体和样式,避免分散设置的冲突
  • 面向对象绘图:使用fig, ax的方式管理绘图元素,比pyplot状态机更清晰可控
  • 避免重复设置:一次性完成刻度位置、标签和旋转的配置,防止多次调用xticks覆盖设置
  • 优化保存参数:添加bbox_inches='tight'确保大字体标签完整显示,PDF为矢量格式,dpi设300即可(无需2000的高dpi)
  • 字体兼容性:确保系统安装了Times New Roman字体,若缺失可替换为系统已有的 serif 字体(如"DejaVu Serif")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 14:30:57