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

Pandas绘图函数TeX兼容名称生成及列名下划线报错解决

解决Pandas绘图时列名含下划线导致TeX编译失败的问题

这个问题的核心在于TeX将下划线_视为下标命令的特殊字符,直接使用未转义的下划线会触发TeX语法错误。根据你想要的显示效果(是把A_1当成下标格式,还是原样显示下划线),可以用以下几种方案解决:

方案1:让TeX把下划线解析为下标效果(推荐如果需要数学格式)

如果你的需求是让A_1显示为"A的下标1"这种数学格式,不需要手动转义,只需要确保Matplotlib启用了mathtext渲染,它会自动识别_作为下标命令:

import pandas as pd
import matplotlib.pyplot as plt

# 开启mathtext,让Matplotlib自动解析下标格式
plt.rcParams['axes.formatter.use_mathtext'] = True

# 示例DataFrame
df = pd.DataFrame({'A_1': [1, 3, 5], 'B_2': [2, 4, 6]})
df.plot()  # 此时图例和轴标签会自动把A_1渲染成A₁
plt.show()

这种方式下,TeX编译会正常工作,因为A_1被正确解析为合法的TeX下标命令。

方案2:转义下划线为普通字符(如果需要原样显示A_1)

如果你只是想让下划线作为普通文本显示(不解析为下标),需要把列名中的_替换为TeX兼容的转义形式\_(注意Python字符串里要写两个反斜杠\\_来转义):

临时处理列名

绘图前用rename方法批量修改列名:

df_tex_compatible = df.rename(columns=lambda col: col.replace('_', '\\_'))
df_tex_compatible.plot()

手动指定绘图标签

如果不想修改原DataFrame,可以在调用plot时通过labels参数直接指定兼容TeX的名称:

df.plot(
    y=['A_1', 'B_2'],
    labels=['A\\_1', 'B\\_2']  # 每个标签转义下划线
)

或者用字典批量映射:

tex_labels = {col: col.replace('_', '\\_') for col in df.columns}
df.plot(labels=tex_labels)

方案3:全局配置自动处理(适合频繁使用的场景)

如果经常需要处理这类列名,可以写一个自定义的绘图函数,自动处理所有列名的TeX兼容性:

import pandas as pd
import matplotlib.pyplot as plt

def tex_compatible_plot(df, **kwargs):
    # 自动转义所有列名的下划线
    tex_labels = {col: col.replace('_', '\\_') for col in df.columns}
    # 合并用户传入的labels参数(如果有的话)
    if 'labels' in kwargs:
        tex_labels.update({k: v.replace('_', '\\_') for k, v in kwargs['labels'].items()})
    kwargs['labels'] = tex_labels
    # 调用Pandas的plot方法
    return df.plot(**kwargs)

# 使用示例
df = pd.DataFrame({'X_axis_1': [10, 20, 30], 'Y_axis_2': [15, 25, 35]})
tex_compatible_plot(df, title='TeX Compatible Plot')
plt.show()

另外,如果你全局开启了TeX渲染(plt.rcParams['text.usetex'] = True),一定要确保所有特殊字符都被正确转义,上面的方法同样适用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:52:47