Python绘图保存为PDF后标签不显示的问题求助
解决Matplotlib保存PDF时大字体标签显示异常问题
问题现象
使用Matplotlib绘制图表并设置大字体后,保存为PDF格式时坐标轴标签无法正常显示(被裁剪或渲染异常)。
原代码问题分析
- 重复创建
figure对象,导致绘图上下文混乱 - 多次调用
plt.xticks,覆盖之前的设置,引发字体和刻度的冲突 - 保存PDF时未设置
bbox_inches='tight',大字体标签超出画布范围被裁剪 - 字体设置分散,同时使用字典参数和
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
相关产品推荐
相关产品推荐

