Matplotlib设置log2对数X轴、埃单位标注及曲线翻转问题咨询
问题成因与修复方案
问题对应原因
\angstrom等LaTeX命令渲染失败:Matplotlib默认内置的mathtext轻量渲染引擎不支持\angstrom这类依赖siunitx等第三方LaTeX宏包的命令,此前写法能生效是因为当时的运行环境配置了调用本地完整LaTeX引擎渲染公式,当前环境要么未开启该配置,要么缺失对应LaTeX发行版依赖。- X轴未应用以2为底的对数刻度:现有代码未添加轴刻度类型配置,Matplotlib默认使用线性坐标轴。
- 曲线反向显示效果未实现:目标效果是反转X轴的数值排布顺序(从大到小显示),并非交换X、Y轴数据,此前交换轴的操作逻辑错误。
修复步骤
- 公式渲染优先用无依赖方案:将
\angstrom替换为Matplotlib内置mathtext原生支持的\AA(标准埃单位符号),\Delta等基础命令可直接保留,无需额外安装任何依赖即可正常渲染。如果必须使用\angstrom写法,可额外配置开启外部LaTeX渲染。 - 新增X轴刻度配置,指定对数刻度的底数为2。
- 调用坐标轴反转接口,将X轴数值反向排布,匹配目标曲线显示效果。
修复后完整可运行代码
import matplotlib.pyplot as plt x = [0.35, 0.38, 0.47, 0.53, 0.6, 0.7, 0.84, 1.53] y = [0, 0.36, 0.87, 2.84, 7.58, 11.25, 14.33, 19.64] plt.plot(x, y) # 设置X轴为以2为底的对数刻度 plt.xscale('log', base=2) # 反转X轴,实现曲线反向效果 plt.gca().invert_xaxis() # 用内置支持的\AA渲染埃单位,无需额外LaTeX依赖 plt.xlabel(r'Grid spacing [$\AA$]') plt.ylabel(r'% error') plt.title('x-y plot') plt.show()
若需要使用
\angstrom等需要宏包支持的LaTeX命令,在代码最开头添加如下配置即可(需本地提前安装TeX Live/MiKTeX等完整LaTeX发行版):plt.rcParams['text.usetex'] = True plt.rcParams['text.latex.preamble'] = r'\usepackage{siunitx}'
内容的提问来源于stack exchange,提问作者sphero
相关产品推荐
相关产品推荐

