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

如何从Python的pandas DataFrame直接生成带正确公式的LaTeX表格图片

解决方案:将包含LaTeX公式的Pandas DataFrame导出为渲染正确的PNG图片

你遇到的异常是因为默认的pandas.plotting.table不会解析LaTeX语法,仅会将\pm作为普通字符串原样输出,和to_latex方法中的escape=False参数无关,该参数仅作用于LaTeX代码导出场景,不会影响matplotlib的绘图渲染。

以下是两种可用的落地方案:


方案1:开启Matplotlib的LaTeX渲染支持

该方案改动量小,在原有绘图逻辑基础上开启LaTeX渲染即可。

前置要求

  • 本地已安装TeX发行版(如TeX Live、MikTeX)
  • 已安装matplotlib、pandas库

示例代码

import pandas as pd
import matplotlib.pyplot as plt
from pandas.plotting import table

# 全局开启matplotlib的LaTeX渲染能力
plt.rcParams.update({
    "text.usetex": True,
    "font.family": "serif"
})

# 构造数据时需要把公式包裹在$符号中,反斜杠需要双写做Python转义
data = {
    'Initialization': ['Random', 'Random2'],
    'Test Accuracy': ['$0.200\\pm0.029$', '$0.200\\pm0.0$'],
}
df = pd.DataFrame(data)

# 初始化画布
fig, ax = plt.subplots(figsize=(6, 2))
ax.xaxis.set_visible(False)
ax.yaxis.set_visible(False)
ax.set_frame_on(False)

# 绘制表格,可自行调整列宽、对齐方式等参数
table(ax, df, loc='center', cellLoc='center', colWidths=[0.4, 0.4])

# 保存或显示图片,bbox_inches参数避免内容被截断
plt.savefig('mytable.png', dpi=300, bbox_inches='tight')
plt.show()

方案2:直接编译LaTeX代码生成PNG(样式更标准)

如果需要完全符合LaTeX排版规范的表格,建议直接将DataFrame导出为完整LaTeX文档,编译为PDF后再转为PNG,样式完全可控,不会出现排版异常。

前置要求

  • 本地已安装TeX发行版
  • 已安装pdf2image库(需要同时安装Poppler工具)

示例代码

import pandas as pd
import os
from pdf2image import convert_from_path

# 构造数据,反斜杠双写做Python转义
data = {
    'Initialization': ['Random', 'Random2'],
    'Test Accuracy': ['0.200\\pm0.029', '0.200\\pm0.0'],
}
df = pd.DataFrame(data)

# 拼接完整的LaTeX文档内容,引入booktabs美化表格线条
latex_doc = r'''
\documentclass{article}
\usepackage{booktabs}
\begin{document}
\thispagestyle{empty} % 去掉页码等多余元素
'''
# 追加表格内容,escape=False保证\pm不被转义
latex_doc += df.to_latex(index=False, escape=False, column_format='cc')
latex_doc += r'''
\end{document}
'''

# 写入临时tex文件
with open('table.tex', 'w', encoding='utf-8') as f:
    f.write(latex_doc)

# 调用系统pdflatex命令编译为PDF
os.system('pdflatex -interaction=nonstopmode table.tex')

# 将PDF第一页转为PNG
pages = convert_from_path('table.pdf', dpi=300)
pages[0].save('mytable.png', 'PNG')

# 清理编译生成的临时文件(按需开启)
# for ext in ['.tex', '.aux', '.log', '.pdf']:
#     os.remove(f'table{ext}')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:36:08