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

Matplotlib中使用TeX分数表达式循环生成X轴标签的问题

解决Matplotlib中TeX分数与字符串格式化的大括号冲突问题

这个坑我之前踩过!核心问题就是要正确区分Python字符串格式化的占位符大括号和TeX语法里的大括号,下面给你两种靠谱的解决方法:

方法一:用.format()配合双层大括号转义

TeX的\frac{分子}{分母}需要用大括号包裹分子,但Python的.format()也用{}作为占位符,直接写会导致解析冲突。我们可以用**双层大括号{{}}**来表示TeX里的单个大括号,同时留出格式化的占位符:

import matplotlib.pyplot as plt
# 如果你的环境默认没开TeX渲染,可以加上这行
# plt.rcParams['text.usetex'] = True

fig = plt.figure()
ax = fig.add_subplot(111)
xax = ax.xaxis

labels = ['0']
# 循环生成1到14的分子,对应1/8到14/8
for i in range(1, 15):
    # 双层大括号{{}}会被解析为TeX里的单个{},内层{}是.format的占位符
    labels.append(r'$\frac{{{}}}{8}$'.format(i))

xax.set_ticklabels(labels)
plt.show()

方法二:用f-string更直观(Python 3.6+)

如果你的Python版本支持f-string,写法会更清晰,同样用{{}}转义TeX的大括号:

import matplotlib.pyplot as plt
# plt.rcParams['text.usetex'] = True

fig = plt.figure()
ax = fig.add_subplot(111)
xax = ax.xaxis

labels = ['0']
for i in range(1, 15):
    # rf表示原始f-string,避免转义字符干扰
    labels.append(rf'$\frac{{{i}}}{8}$')

xax.set_ticklabels(labels)
plt.show()

额外说明:

  1. 我把循环范围改成了range(1,15),这样生成的分子是1到14,正好匹配你要的[1/8,2/8,…,14/8],原来的range(0,14)会生成0到13,不符合需求哦。
  2. 如果遇到分数显示异常,记得检查是否开启了TeX渲染,添加plt.rcParams['text.usetex'] = True即可(需要系统安装TeX环境,比如TeX Live或者MiKTeX)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:10:53