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

matplotlib图例含Unicode字符触发LaTeX inputenc报错如何解决

matplotlib图例多语言Unicode字符显示解决方案

场景1:不需要LaTeX渲染文本(推荐,最简单)

核心是直接使用matplotlib原生文本渲染,只要配置支持多语言的系统字体即可:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt

# 关闭LaTeX渲染(如之前未手动开启可省略本行)
plt.rcParams['text.usetex'] = False
# 配置支持多语言的无衬线字体,优先选覆盖字符集广的字体如Noto系列
plt.rcParams['font.sans-serif'] = ['Noto Sans CJK SC', 'Noto Sans', 'DejaVu Sans']
# 修复负号显示异常问题
plt.rcParams['axes.unicode_minus'] = False

plt.plot(0,0, label='foo Д 中文测试')
plt.legend()
plt.show()

场景2:必须使用LaTeX渲染文本

之前配置失效是因为XeLaTeX原生支持UTF-8,不需要inputenc、fontenc这类面向pdfLaTeX的包,正确配置如下:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt

plt.rcParams.update({
    "text.usetex": True,
    "pgf.texsystem": "xelatex",
    "pgf.preamble": "\n".join([
         # 加载XeLaTeX字体管理包
         r"\usepackage{fontspec}",
         # 配置主字体,覆盖拉丁文、西里尔文等字符
         r"\setmainfont{Noto Sans}",
         # 加载中文支持包,配置中文字体
         r"\usepackage{xeCJK}",
         r"\setCJKmainfont{Noto Sans CJK SC}",
    ]),
})

plt.plot(0,0, label='foo Д 中文测试')
plt.legend()
# 可直接保存为PDF/PGF格式,显示完全正常
plt.savefig("multilang_plot.pdf")

注意事项

  • 提前在系统中安装用到的字体,Noto系列字体为开源字体,覆盖绝大多数常用Unicode字符,可直接安装使用
  • 若仍有个别字符不显示,替换为支持该字符的字体即可
  • 无需切换后端即可同时支持所有常用语言字符显示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:06:00