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
相关产品推荐
相关产品推荐

