ubuntu中解决matplotlib无法显示中文问题

一、查看本机matplotlib中支持的字体

运行下列代码即可查看支持的字体

python 复制代码
# 查询当前系统所有字体
from matplotlib.font_manager import FontManager

# 获取字体名称集合
mpl_fonts = sorted(set(f.name for f in FontManager().ttflist))

# 设置每行列数
cols = 5
font_rows = [mpl_fonts[i:i + cols] for i in range(0, len(mpl_fonts), cols)]

print("all font list from matplotlib.font_manager:\n")
for row in font_rows:
    print("".join(f"{name:<25}" for name in row))  # 每列宽度 25

运行结果参考

bash 复制代码
all font list from matplotlib.font_manager:

AR PL UKai CN            AR PL UMing CN           Abyssinica SIL           Andale Mono              Ani                      
AnjaliOldLipi            Arial                    Arial Black              C059                     Chandas                  
Chilanka                 Comic Sans MS            Courier New              D050000L                 DejaVu Math TeX Gyre     
DejaVu Sans              DejaVu Sans Display      DejaVu Sans Mono         DejaVu Serif             DejaVu Serif Display     
Dhurjati                 Droid Sans Fallback      Dyuthi                   FreeMono                 FreeSans                 
FreeSerif                Gargi                    Garuda                   Gayathri                 Georgia                  
Gidugu                   Gubbi                    Gurajada                 Impact                   Jamrul                   
KacstArt                 KacstBook                KacstDecorative          KacstDigital             KacstFarsi               
KacstLetter              KacstNaskh               KacstOffice              KacstOne                 KacstPen                 
KacstPoster              KacstQurn                KacstScreen              KacstTitle               KacstTitleL              
Kalapi                   Kalimati                 Karumbi                  Keraleeyam               Khmer OS                 
Khmer OS System          Kinnari                  LKLUG                    LakkiReddy               Laksaman                 
Liberation Mono          Liberation Sans          Liberation Sans Narrow   Liberation Serif         Likhan                   
Lohit Assamese           Lohit Bengali            Lohit Devanagari         Lohit Gujarati           Lohit Gurmukhi           
Lohit Kannada            Lohit Malayalam          Lohit Odia               Lohit Tamil              Lohit Tamil Classical    
Lohit Telugu             Loma                     Mallanna                 Mandali                  Manjari                  
Meera                    Mitra                    Mukti                    NATS                     NTR                      
Nakula                   Navilu                   Nimbus Mono PS           Nimbus Roman             Nimbus Sans              
Nimbus Sans Narrow       Norasi                   Noto Mono                Noto Sans CJK JP         Noto Sans Mono           
Noto Serif CJK JP        OpenSymbol               P052                     Padauk                   Padauk Book              
Pagul                    Peddana                  Phetsarath OT            Ponnala                  Pothana2000              
Potti Sreeramulu         Purisa                   Rachana                  RaghuMalayalamSans       Ramabhadra               
Ramaraja                 Rasa                     RaviPrakash              Rekha                    STIXGeneral              
STIXNonUnicode           STIXSizeFiveSym          STIXSizeFourSym          STIXSizeOneSym           STIXSizeThreeSym         
STIXSizeTwoSym           Saab                     Sahadeva                 Samanata                 Samyak Devanagari        
Samyak Gujarati          Samyak Malayalam         Samyak Tamil             Sarai                    Sawasdee                 
SimHei                   SimSun-ExtB              Sree Krushnadevaraya     Standard Symbols PS      Suranna                  
Suravaram                Suruma                   Syamala Ramana           TenaliRamakrishna        Tibetan Machine Uni      
Times New Roman          Timmana                  Tlwg Mono                Tlwg Typewriter          Tlwg Typist              
Tlwg Typo                Trebuchet MS             URW Bookman              URW Gothic               Ubuntu                   
Ubuntu Condensed         Ubuntu Mono              Umpush                   Uroob                    Vemana2000               
Verdana                  Waree                    Webdings                 WenQuanYi Micro Hei      Yrsa                     
Z003                     aakar                    cmb10                    cmex10                   cmmi10                   
cmr10                    cmss10                   cmsy10                   cmtt10                   dsrom10                  
esint10                  eufm10                   mry_KacstQurn            msam10                   msbm10                   
ori1Uni                  padmaa                   padmaa-Bold.1.1          rsfs10                   stmary10                 
wasy10

ps: SimHei 即是中文黑体,我这里面已经安装了,如果没有安装见步骤(二)

二、将SimHei字体拷贝到matplotlib字体路径下

simhei.tff文件可以在Windows中获取,路径如下

bash 复制代码
C:\Windows\Fonts

查看matplotlib配置文件路径

python 复制代码
import matplotlib as mpl
print(mpl.matplotlib_fname())

输出如下

bash 复制代码
/home/ryan/.local/lib/python3.10/site-packages/matplotlib/mpl-data/matplotlibrc

将上面拷贝的simhei.tff文件放到下面文件夹中

bash 复制代码
/home/ryan/.local/lib/python3.10/site-packages/matplotlib/mpl-data/fonts/ttf

然后再执行一下上面查看支持字体的代码,看看字体是否添加成功。

三、重建字体缓存

删除matplotlib配置文件,将下面路径下的.json文件删除。

bash 复制代码
~/.cache/matplotlib

然后执行

python 复制代码
import matplotlib

#重建历史缓存  更新完字体执行一次就可以
matplotlib.font_manager._load_fontmanager(try_read_cache=False)

测试以下中文能否显示

python 复制代码
import matplotlib.pyplot as plt
import matplotlib as mpl

plt.rcParams['font.sans-serif'] = ['SimHei'] #添加"SimHei"(宋体)到字库族列表中
mpl.rcParams['axes.unicode_minus'] = False #解决负号'-'显示为方块的问题

# 第一个 Figure
fig1, ax1 = plt.subplots()
ax1.plot([1, 2, 3], [4, 5, 6])
ax1.set_title("第一张图")

plt.show()  # 显示所有图
相关推荐
TonyLee0171 小时前
Claude Code + DeepSeek:服务器安装与使用笔记
linux·服务器·deepseek·claude code
buhuizhiyuci1 小时前
【Linux 篇】数字世界的水流蓄水池 —— IO 缓冲区机制深度实战解析
linux·运维·服务器·c++
骇客野人1 小时前
Linux 服务器 Python 版 MCP 服务部署整体方案(适配 Claude/Cursor/自研Agent)
linux·服务器·python
天疆说2 小时前
04 稳定性与性能调优实录:OOM 崩溃、并发槽位、前缀缓存与 DSpark 调参
linux·运维·缓存
星卯教育tony2 小时前
NOI Linux 2.0 服务器多用户网页桌面部署方案(腾讯云轻量Ubuntu20.04专属版 CSP复赛比赛环境搭建免安装虚拟机 )
linux·服务器·腾讯云
Forever Nore3 小时前
LeetCode 14 最长公共前缀 - 纵向扫描
linux·服务器·leetcode
拂拉氏3 小时前
【知识讲解】 Linux权限相关知识讲解
linux·权限
Shadow(⊙o⊙)3 小时前
Linux网络部分——TCP协议服务端客户端交互接口,入门级硬核解析1.0
linux·网络·tcp/ip
桑榆4168 小时前
双系统(Windows + Ubuntu)安装流程
linux·windows·ubuntu
ltl14 小时前
实时 OS 巡礼:VxWorks、QNX、Zephyr 与 PREEMPT_RT
linux