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

Matplotlib PGF输出异常:等高线标签超出图形边界的解决方法?

解决Matplotlib PGF输出中等高线标签超出边界的问题

我之前也遇到过一模一样的问题——用Matplotlib导出PGF文件后,LaTeX渲染时靠近坐标轴的等高线标签会超出图形边界,和轴线重叠。要实现官网示例里标签被裁剪在图形区域内的效果,可以试试下面这几个方法:

方法1:给等高线标签启用裁剪功能

这是最直接贴近官网示例效果的方法。在调用clabel()的时候,加上clip_on=True参数,这样标签会被限制在坐标轴的范围内,超出部分会自动被裁剪掉:

修改代码中的这一行:

plt.clabel(CS, inline=1, fontsize=10, clip_on=True)

方法2:调整图形布局,留出足够空间

如果不想裁剪标签,而是让标签完全显示在边界内,可以用tight_layout()自动调整子图的边距,确保所有元素都在图形区域里:

在plt.savefig()之前添加这行代码:

plt.tight_layout()

要是自动布局的效果不够理想,还可以手动设置边距数值,按需调整:

plt.subplots_adjust(left=0.12, right=0.95, bottom=0.1, top=0.9)

方法3:配置PGF导出参数,匹配LaTeX渲染

有时候PGF导出的默认设置会导致文本渲染偏移,在代码开头添加这些配置,可以让Matplotlib的输出和LaTeX渲染保持一致:

matplotlib.rcParams['pgf.texsystem'] = 'pdflatex'
matplotlib.rcParams['pgf.preamble'] = [
    r'\usepackage{amsmath}',
    r'\usepackage{amssymb}',
    r'\usepackage{txfonts}'
]

完整修改后的代码

import matplotlib
import numpy as np
import matplotlib.cm as cm
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt

# 基础配置+PGF渲染优化
matplotlib.rcParams['xtick.direction'] = 'out'
matplotlib.rcParams['ytick.direction'] = 'out'
matplotlib.rcParams['pgf.texsystem'] = 'pdflatex'
matplotlib.rcParams['pgf.preamble'] = [
    r'\usepackage{amsmath}',
    r'\usepackage{amssymb}',
    r'\usepackage{txfonts}'
]

delta = 0.025
x = np.arange(-3.0, 3.0, delta)
y = np.arange(-2.0, 2.0, delta)
X, Y = np.meshgrid(x, y)

Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
Z2 = mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1)
Z = 10.0 * (Z2 - Z1)

plt.figure()
CS = plt.contour(X, Y, Z)
# 启用标签裁剪
plt.clabel(CS, inline=1, fontsize=10, clip_on=True)
plt.title('Simplest default with labels')
# 自动调整布局
plt.tight_layout()
plt.savefig('plot.pgf')

这些方法里,方法1最能实现官网示例的裁剪效果,方法2适合想要完整显示标签的场景,方法3则能避免因LaTeX字体差异导致的额外偏移。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:13:16