背景/问题

我使用jupyter notebook运行在远程linux服务器上,使用pandas.Series的plot绘制图形时,发现坐标中有乱码,为空白方格型。

踩坑

搜索相关资料,发现主要都是介绍windows上的乱码问题,让设置字体为黑体或仿宋等,但实际上linux系统上并没有装这些字体,所以无效。

解决方案

也可以直接跳到4尝试按我的配置设置字体,如果不行再尝试1 2 3步骤

1 查询系统中有哪些字体

import matplotlib.font_manager as fm
print(fm.findSystemFonts())

会给出类似这样的输出:

['/usr/share/fonts/opentype/noto/NotoSansCJK-Bold.ttc',
 '/usr/share/fonts/truetype/tlwg/Purisa-Oblique.ttf',
 '/usr/share/fonts/truetype/tlwg/Kinnari.ttf',
 '/usr/share/fonts/opentype/urw-base35/NimbusSansNarrow-Oblique.otf',
 '/usr/share/fonts/truetype/ubuntu/Ubuntu-R.ttf',

2 支持中文的字体

在我的系统中,存在多个明确支持中文的字体,主要来自谷歌的 Noto CJK 系列和安卓经典的 Droid Sans Fallback 系列。以下是具体支持中文字体的详细信息:

字体文件路径字体类型特点与用途
/usr/share/fonts/opentype/noto/NotoSansCJK-Bold.ttc无衬线宋体(粗体)Noto CJK 系列核心字体,专为东亚语言(中、日、韩)设计,支持简体中文、繁体中文,粗体适合标题/强调文本
/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc无衬线宋体(常规体)同上,常规字重,适合正文排版,兼容性强,是 Linux 系统中常见的中文默认字体之一
/usr/share/fonts/opentype/noto/NotoSerifCJK-Bold.ttc衬线宋体(粗体)Noto CJK 衬线系列,字体带有衬线(笔画末端装饰),风格更正式,适合书籍、文档等严肃场景的标题
/usr/share/fonts/opentype/noto/NotoSerifCJK-Regular.ttc衬线宋体(常规体)同上,常规字重,衬线设计提升长文本阅读体验,适合中文正文排版
/usr/share/fonts/truetype/droid/DroidSansFallbackFull.ttf无衬线 fallback 字体安卓系统经典中文 fallback 字体,专门用于显示中文等非拉丁文字符,“Full” 版本包含更全的中文生僻字,兼容性极佳

3 确认字体实际可检索的名称

因为上面查到的都是ttf的源文件名,是不能让matplotlib直接检索的,需要使用字体对应的名字,以DroidSansFallbackFull为例,使用如下代码查询:

import matplotlib.font_manager as fm
# 查找 DroidSansFallbackFull.ttf 的内部名称
for font in fm.findSystemFonts():
    if "DroidSansFallbackFull.ttf" in font:
        font_prop = fm.FontProperties(fname=font)
        print("字体内部名称:", font_prop.get_name())  # 这是正确的配置名称

实际输出为:

字体内部名称: Droid Sans Fallback

4 设置matplotlib默认字体

import matplotlib as mpl
import matplotlib.pyplot as plt
import pandas as pd

# 1. 重置所有 matplotlib 配置(清除旧缓存)
mpl.rcParams.update(mpl.rcParamsDefault)

# 2. 用查到的正确名称配置("Droid Sans Fallback")
mpl.rcParams["font.family"] = ["Droid Sans Fallback", "sans-serif"]  # 覆盖所有字体场景
mpl.rcParams["axes.unicode_minus"] = False  # 解决负号问题

# 3. 绘图
a.plot(XX)
plt.show()
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐