Linux下Matplotlib中文乱码终极解决方案:从字体安装到全局配置(附SimHei.ttf下载)

news2026/3/20 4:19:33
Linux下Matplotlib中文显示从乱码到优雅的完整实践指南如果你在Linux服务器上跑过数据可视化脚本大概率见过那个让人头疼的方块阵——Matplotlib默认字体对中文的支持几乎为零。这不是个小问题当你的图表需要呈现给中文用户或者分析报告里必须包含中文标签时乱码直接让专业度打对折。我最初遇到这个问题时试了网上七八种方法有的临时生效换个环境又失效有的需要root权限在严格管控的生产服务器上根本行不通。经过多次踩坑和反复测试终于整理出一套真正可靠、适应不同场景的解决方案。这篇文章不会只给你一个“万能命令”而是带你理解字体系统的运作机制掌握从临时调试到永久配置的全套方法。无论你是个人开发者在本地Ubuntu上折腾还是运维工程师需要在无网络访问的离线服务器上部署或是数据科学家在Docker容器里构建可复现的分析环境这里都有对应的解决路径。1. 理解Linux字体系统与Matplotlib的字体查找逻辑要彻底解决中文显示问题得先知道Matplotlib在Linux上是怎么找字体的。很多人直接复制粘贴配置命令但一旦环境稍有变化就束手无策根本原因在于没搞懂背后的机制。1.1 Matplotlib的字体加载流程Matplotlib启动时会执行一个复杂的字体发现过程读取配置文件首先查找matplotlibrc文件确定默认的字体族如sans-serif、serif等扫描字体目录根据配置的字体族在多个预定义路径中搜索可用的字体文件构建字体缓存将找到的字体信息缓存到~/.cache/matplotlib/或~/.matplotlib/目录下渲染时匹配当需要显示文本时从缓存中匹配最合适的字体关键点在于Matplotlib不会自动识别系统安装的所有字体它有自己的字体路径列表。这个列表通常包括# 查看Matplotlib的字体搜索路径 import matplotlib from matplotlib import font_manager print(Matplotlib配置文件位置:, matplotlib.matplotlib_fname()) print(\n字体搜索路径:) for path in font_manager.fontManager.ttflist: # 这里只显示前几个路径示例 if ttf in path.fname: print(path.fname) break在典型的Linux系统中Matplotlib主要查找以下位置/usr/share/fonts/- 系统全局字体目录/usr/local/share/fonts/- 本地安装的字体~/.fonts/- 用户个人字体目录较新系统可能是~/.local/share/fonts/Matplotlib自带的字体目录通常在Python包的mpl-data/fonts/ttf/下1.2 为什么中文字体会显示为方块当Matplotlib找不到匹配的字体时它会回退到默认字体。Linux下Matplotlib的默认字体通常是DejaVu Sans或Bitstream Vera Sans这些字体不包含中文字形。遇到中文字符时系统有两种处理方式直接显示缺失字形显示为空白或方块□尝试字体回退如果系统配置了字体回退链可能会尝试其他字体但Matplotlib的配置中通常没有正确的中文字体回退设置注意即使你在系统中安装了中文字体如果Matplotlib的字体缓存没有更新或者配置文件没有正确指向这些字体中文仍然无法显示。1.3 字体文件格式TTF vs TTC这是很多人忽略但极其重要的细节字体格式全称特点Matplotlib支持TTFTrueType Font单个字体文件包含一种字重和样式✅ 完全支持TTCTrueType Collection多个TTF字体的集合如常规、粗体、斜体等打包在一起⚠️ 有限支持大多数Windows字体如微软雅黑msyh.ttc都是TTC格式。虽然有些教程说可以直接使用但我实测在部分Linux发行版和Matplotlib版本中TTC字体会导致各种奇怪问题。最稳妥的方案是使用TTF格式的中文字体。如果你只有TTC文件可以尝试用fonttools工具进行转换# 安装fonttools pip install fonttools # 将TTC转换为多个TTF文件 pyftsubset msyh.ttc --textABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 --output-filemsyh-regular.ttf # 更简单的方法使用在线转换工具或寻找TTF版本的字体2. 中文字体的获取与安装策略解决了“为什么”接下来是“怎么做”。第一步是获取合适的中文字体。这里我推荐几个经过实际项目验证的可靠选择。2.1 字体选择哪些中文字体最适合数据可视化不是所有中文字体都适合在图表中使用。好的数据可视化字体应该具备清晰易读在小字号下依然清晰可辨字形完整包含常用汉字和符号风格中性不过度装饰不影响数据本身的呈现授权友好允许在商业项目中使用基于这些标准我推荐以下字体字体名称文件格式特点适用场景授权情况思源黑体TTF开源免费字形完整7种字重所有场景特别是需要多字重的专业报告SIL开源字体授权文泉驿微米黑TTF专为屏幕显示优化开源免费服务器环境无GUI的纯命令行场景GPL授权方正黑体_GBKTTF商业字体Windows兼容性好需要与Windows文档保持一致的场景需购买商业授权SimHei黑体TTFWindows自带广泛使用临时解决方案兼容性测试随Windows授权个人建议对于长期项目优先选择思源黑体。它不仅免费开源而且由Adobe和Google共同开发质量有保障几乎包含了所有现代汉字。2.2 字体安装的三种方式及适用场景根据你的使用环境和权限选择不同的安装策略方式一用户级安装推荐用于个人开发环境这是最安全、最灵活的方式不需要root权限不会影响系统其他用户。# 创建用户字体目录如果不存在 mkdir -p ~/.local/share/fonts/ # 下载思源黑体以Regular字重为例 wget -O ~/.local/share/fonts/SourceHanSansSC-Regular.ttf \ https://github.com/adobe-fonts/source-han-sans/raw/release/OTF/SimplifiedChinese/SourceHanSansSC-Regular.otf # 或者使用curl curl -L -o ~/.local/share/fonts/SourceHanSansSC-Regular.ttf \ https://github.com/adobe-fonts/source-han-sans/raw/release/OTF/SimplifiedChinese/SourceHanSansSC-Regular.otf # 更新用户字体缓存 fc-cache -fv ~/.local/share/fonts/验证安装是否成功# 查看已安装的中文字体 fc-list :langzh | grep -i source\|思源 # 应该能看到类似输出 # /home/username/.local/share/fonts/SourceHanSansSC-Regular.ttf: Source Han Sans SC,思源黑体:styleRegular方式二系统级安装适用于多用户环境或Docker基础镜像如果你有sudo权限并且希望所有用户都能使用这些字体# 创建系统字体目录 sudo mkdir -p /usr/share/fonts/chinese/ # 复制字体文件假设字体文件已下载到当前目录 sudo cp SourceHanSansSC-*.ttf /usr/share/fonts/chinese/ # 修改权限 sudo chmod 644 /usr/share/fonts/chinese/*.ttf # 更新系统字体缓存 sudo fc-cache -fv # 重建字体配置某些系统需要 sudo mkfontscale sudo mkfontdir方式三Matplotlib私有字体目录适用于虚拟环境或容器当你在Python虚拟环境或Docker容器中工作时可以避免修改系统或用户配置import matplotlib from pathlib import Path # 获取Matplotlib字体目录 matplotlib_font_dir Path(matplotlib.get_data_path()) / fonts / ttf # 创建目标目录如果不存在 matplotlib_font_dir.mkdir(parentsTrue, exist_okTrue) # 复制字体文件 import shutil shutil.copy(SourceHanSansSC-Regular.ttf, matplotlib_font_dir) # 这种方法需要清除Matplotlib缓存并重启Python进程2.3 离线环境的字体部署方案在生产服务器或隔离网络中你可能无法直接从网上下载字体。这时需要提前准备字体包预下载# 在可联网的机器上准备字体包 mkdir chinese-fonts cd chinese-fonts # 下载思源黑体全套可选 wget https://github.com/adobe-fonts/source-han-sans/releases/download/2.004R/SourceHanSansSC.zip unzip SourceHanSansSC.zip # 或只下载需要的字重 wget https://github.com/adobe-fonts/source-han-sans/raw/release/OTF/SimplifiedChinese/SourceHanSansSC-Regular.otf wget https://github.com/adobe-fonts/source-han-sans/raw/release/OTF/SimplifiedChinese/SourceHanSansSC-Bold.otf # 打包 tar czf chinese-fonts.tar.gz *.otf install-fonts.sh创建安装脚本install-fonts.sh#!/bin/bash # 安装脚本示例 set -e FONT_DIR${1:-$HOME/.local/share/fonts} mkdir -p $FONT_DIR # 复制所有.otf或.ttf文件 cp *.otf *.ttf $FONT_DIR/ 2/dev/null || true # 更新字体缓存 fc-cache -fv $FONT_DIR echo 字体已安装到: $FONT_DIR echo 请重启Python进程或清除Matplotlib缓存通过SCP或其他方式传输到目标服务器scp chinese-fonts.tar.gz userserver:/tmp/ ssh userserver cd /tmp tar xzf chinese-fonts.tar.gz bash install-fonts.sh3. Matplotlib配置从临时修改到永久生效字体安装好了接下来是告诉Matplotlib使用这些字体。这里有多种配置方式各有适用场景。3.1 方法一运行时动态配置临时解决方案适合快速测试或一次性脚本import matplotlib.pyplot as plt import matplotlib.font_manager as fm # 方法A直接指定字体文件路径 font_path /home/username/.local/share/fonts/SourceHanSansSC-Regular.ttf font_prop fm.FontProperties(fnamefont_path) plt.figure(figsize(10, 6)) plt.plot([1, 2, 3, 4], [1, 4, 9, 16]) plt.title(销售数据趋势分析, fontpropertiesfont_prop, fontsize16) plt.xlabel(时间季度, fontpropertiesfont_prop) plt.ylabel(销售额万元, fontpropertiesfont_prop) plt.grid(True, alpha0.3) # 设置刻度标签字体 for label in plt.gca().get_xticklabels() plt.gca().get_yticklabels(): label.set_fontproperties(font_prop) plt.show()这种方法的问题很明显每个文本元素都要单独设置代码冗长且无法应用于图例等其他元素。3.2 方法二rcParams全局配置脚本级解决方案更优雅的方式是修改Matplotlib的运行时参数import matplotlib.pyplot as plt import matplotlib.font_manager as fm import numpy as np # 查找已安装的中文字体 chinese_fonts [f.name for f in fm.fontManager.ttflist if Source Han Sans in f.name or 思源 in f.name or SimHei in f.name] if chinese_fonts: # 设置全局字体 plt.rcParams[font.sans-serif] [chinese_fonts[0]] plt.rcParams[font.sans-serif] plt.rcParams[axes.unicode_minus] False # 解决负号显示问题 print(f已设置中文字体: {chinese_fonts[0]}) else: print(警告未找到中文字体将使用默认字体) # 现在可以正常使用中文 plt.figure(figsize(12, 8)) # 生成示例数据 x np.linspace(0, 10, 100) categories [产品A, 产品B, 产品C, 产品D] values np.random.randn(4, 100).cumsum(axis1) for i, (cat, val) in enumerate(zip(categories, values)): plt.plot(x, val, labelcat, linewidth2) plt.title(多产品线随时间变化趋势, fontsize18, pad20) plt.xlabel(时间天, fontsize14) plt.ylabel(指标值, fontsize14) plt.legend(title产品类别, title_fontsize13, fontsize11) plt.grid(True, alpha0.3, linestyle--) # 添加中文标注示例 plt.text(5, max(values.flatten()) * 0.9, 峰值增长期, fontsize12, bboxdict(boxstyleround,pad0.3, facecoloryellow, alpha0.3)) plt.tight_layout() plt.show()这种方法的优点是整个脚本中所有图表都会使用中文字体缺点是每次运行脚本都需要执行这些配置代码。3.3 方法三修改matplotlibrc配置文件永久解决方案对于需要长期稳定工作的环境修改配置文件是最可靠的方法。步骤1定位配置文件import matplotlib print(配置文件位置:, matplotlib.matplotlib_fname())输出类似/home/username/.local/lib/python3.8/site-packages/matplotlib/mpl-data/matplotlibrc步骤2创建用户级配置文件推荐不要直接修改系统级的配置文件而是创建用户级别的副本# 获取Matplotlib配置目录 python -c import matplotlib; import os; print(os.path.dirname(matplotlib.matplotlib_fname())) # 创建用户配置目录 mkdir -p ~/.config/matplotlib/ # 复制默认配置如果不存在 python -c import matplotlib; import shutil; import os; srcmatplotlib.matplotlib_fname(); dstos.path.expanduser(~/.config/matplotlib/matplotlibrc); shutil.copy2(src, dst) if not os.path.exists(dst) else print(文件已存在)步骤3编辑配置文件打开~/.config/matplotlib/matplotlibrc找到并修改以下行# 大约在第200行左右找到字体相关配置 font.family : sans-serif # 在font.sans-serif列表的开头添加你的中文字体 font.sans-serif : Source Han Sans SC, DejaVu Sans, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif # 解决负号显示问题 axes.unicode_minus : False # 可选设置默认字体大小 font.size : 12.0 axes.titlesize : 16.0 axes.labelsize : 14.0 xtick.labelsize : 12.0 ytick.labelsize : 12.0 legend.fontsize : 11.0 figure.titlesize : 18.0步骤4清除字体缓存修改配置后必须清除Matplotlib的缓存# 删除缓存文件 rm -rf ~/.cache/matplotlib rm -rf ~/.matplotlib/*.cache rm -rf ~/.matplotlib/fontlist-*.json # 或者在Python中强制重建缓存 python -c import matplotlib.font_manager; matplotlib.font_manager._rebuild()3.4 方法四使用mplfonts工具现代化方案最近社区出现了一个专门解决这个问题的工具——mplfonts它简化了整个流程# 安装 pip install mplfonts # 初始化会自动下载和配置中文字体 mplfonts init # 在代码中使用 import matplotlib.pyplot as plt from mplfonts import use_font # 使用特定字体 use_font(Source Han Sans SC) # 思源黑体 # 或 use_font(SimHei) # 黑体 # 现在可以正常使用中文 plt.plot([1, 2, 3], [4, 5, 6]) plt.title(中文标题示例) plt.show()mplfonts的优点自动处理字体下载和安装支持多种中文字体提供字体管理功能兼容虚拟环境和容器缺点需要网络连接下载字体增加了项目依赖4. 高级场景与疑难问题排查即使按照上述步骤操作有时还是会遇到问题。这部分分享一些高级场景的解决方案和常见问题的排查方法。4.1 Docker容器中的字体配置在Docker容器中配置中文字体需要特别注意因为容器通常是精简的系统镜像。Dockerfile示例FROM python:3.9-slim # 安装系统依赖和字体工具 RUN apt-get update apt-get install -y \ wget \ fontconfig \ rm -rf /var/lib/apt/lists/* # 创建字体目录 RUN mkdir -p /usr/share/fonts/chinese/ # 下载并安装思源黑体 RUN wget -q -O /tmp/SourceHanSansSC.zip \ https://github.com/adobe-fonts/source-han-sans/releases/download/2.004R/SourceHanSansSC.zip \ unzip -q /tmp/SourceHanSansSC.zip -d /tmp/ \ cp /tmp/SourceHanSansSC/OTF/SimplifiedChinese/*.otf /usr/share/fonts/chinese/ \ rm -rf /tmp/SourceHanSansSC.zip /tmp/SourceHanSansSC # 或者使用更小的字体包只包含Regular和Bold RUN wget -q -O /usr/share/fonts/chinese/SourceHanSansSC-Regular.otf \ https://github.com/adobe-fonts/source-han-sans/raw/release/OTF/SimplifiedChinese/SourceHanSansSC-Regular.otf \ wget -q -O /usr/share/fonts/chinese/SourceHanSansSC-Bold.otf \ https://github.com/adobe-fonts/source-han-sans/raw/release/OTF/SimplifiedChinese/SourceHanSansSC-Bold.otf # 配置字体 RUN chmod 644 /usr/share/fonts/chinese/*.otf \ fc-cache -fv # 安装Python包 COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # 设置Matplotlib配置 ENV MATPLOTLIBRC/etc/matplotlibrc RUN echo font.family : sans-serif /etc/matplotlibrc \ echo font.sans-serif : Source Han Sans SC, DejaVu Sans, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif /etc/matplotlibrc \ echo axes.unicode_minus : False /etc/matplotlibrc WORKDIR /app COPY . . CMD [python, app.py]关键点使用slim镜像时需要手动安装fontconfig字体文件要放在系统字体目录并设置正确权限必须运行fc-cache更新字体缓存通过环境变量MATPLOTLIBRC指定配置文件位置4.2 Jupyter Notebook/Lab中的特殊处理在Jupyter环境中Matplotlib的缓存机制可能导致配置不立即生效# 在Jupyter中强制重新加载配置 import matplotlib matplotlib.rcParams.update(matplotlib.rcParamsDefault) # 重置为默认 # 重新设置中文字体 import matplotlib.font_manager as fm import matplotlib.pyplot as plt # 方法1直接修改rcParams plt.rcParams[font.sans-serif] [Source Han Sans SC] plt.rcParams[axes.unicode_minus] False # 方法2使用IPython魔法命令在Notebook开头 %config InlineBackend.figure_format retina %matplotlib inline # 清除Matplotlib缓存 import matplotlib matplotlib.font_manager._rebuild() # 重启内核是最彻底的方法 print(如果字体仍不生效请尝试Kernel - Restart Clear Output)4.3 常见问题排查指南当中文仍然显示为方块时按以下步骤排查步骤1检查字体是否真的安装成功import matplotlib.font_manager as fm import subprocess # 方法A使用Matplotlib的字体管理器 all_fonts [f.name for f in fm.fontManager.ttflist] chinese_fonts [f for f in all_fonts if any(keyword in f for keyword in [Song, Hei, Yuan, Kai, Fang, Source, 思源, 文泉])] print(找到的中文字体:, chinese_fonts[:10]) # 显示前10个 # 方法B使用系统命令 result subprocess.run([fc-list, :langzh], capture_outputTrue, textTrue) print(\n系统识别的中文字体:) print(result.stdout[:500]) # 显示前500字符步骤2检查Matplotlib的字体缓存import matplotlib import json import os # 查找缓存文件 cache_dir os.path.join(matplotlib.get_cachedir(), fontlist-*.json) print(缓存目录:, matplotlib.get_cachedir()) # 查看缓存内容 import glob cache_files glob.glob(os.path.join(matplotlib.get_cachedir(), fontlist-*.json)) if cache_files: with open(cache_files[0], r) as f: cache_data json.load(f) # 检查缓存中是否有中文字体 chinese_in_cache [f for f in cache_data if any(keyword in f.get(name, ) for keyword in [Source, SimHei, WenQuanYi])] print(f缓存中的中文字体数量: {len(chinese_in_cache)})步骤3手动指定字体路径测试# 如果常规方法无效尝试绝对路径 font_path /usr/share/fonts/chinese/SourceHanSansSC-Regular.otf if os.path.exists(font_path): import matplotlib.font_manager as fm import matplotlib.pyplot as plt # 手动添加字体 fm.fontManager.addfont(font_path) font_name fm.FontProperties(fnamefont_path).get_name() # 立即使用 plt.rcParams[font.sans-serif] [font_name] plt.rcParams[axes.unicode_minus] False print(f手动加载字体: {font_name}) # 测试 plt.figure() plt.text(0.5, 0.5, 中文测试, fontsize20, hacenter) plt.axis(off) plt.show() else: print(f字体文件不存在: {font_path})步骤4检查字体文件权限和完整性# 检查字体文件权限 ls -la /usr/share/fonts/chinese/ # 或 ~/.local/share/fonts/ # 正确的权限应该是 -rw-r--r-- (644) # 如果不是修复权限 sudo chmod 644 /usr/share/fonts/chinese/*.ttf # 检查字体文件是否损坏 fc-query /usr/share/fonts/chinese/SourceHanSansSC-Regular.otf # 如果有输出说明字体文件正常4.4 性能优化与最佳实践当处理大量图表或需要高性能渲染时字体配置也会影响性能预加载字体在应用启动时加载字体避免每次绘图都重新查找# 在应用初始化时执行 import matplotlib matplotlib.font_manager._rebuild() # 重建缓存 matplotlib.rcParams[font.sans-serif] [Source Han Sans SC] matplotlib.rcParams[axes.unicode_minus] False使用字体子集如果只需要少量汉字可以创建字体子集减小文件大小from fontTools.subset import subset # 创建只包含常用汉字的字体子集 common_chars 的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞 # 使用fonttools创建子集需要安装fonttools # pip install fonttools缓存渲染结果对于静态报告可以预渲染图表保存为图片import matplotlib.pyplot as plt import hashlib import os def get_cached_plot(data, title, cache_dirplot_cache): # 创建缓存键 cache_key hashlib.md5(f{str(data)}{title}.encode()).hexdigest() cache_file os.path.join(cache_dir, f{cache_key}.png) # 如果缓存存在直接返回 if os.path.exists(cache_file): return cache_file # 否则创建图表 plt.figure(figsize(10, 6)) plt.plot(data) plt.title(title) plt.tight_layout() # 保存到缓存 os.makedirs(cache_dir, exist_okTrue) plt.savefig(cache_file, dpi150, bbox_inchestight) plt.close() return cache_file4.5 多字体混合使用技巧有时我们需要在同一个图表中使用不同的字体比如中文标题用黑体英文标签用等宽字体import matplotlib.pyplot as plt import matplotlib.font_manager as fm import numpy as np # 配置多种字体 plt.rcParams[font.sans-serif] [Source Han Sans SC, DejaVu Sans] plt.rcParams[font.monospace] [DejaVu Sans Mono] plt.rcParams[axes.unicode_minus] False # 创建图表 fig, (ax1, ax2) plt.subplots(1, 2, figsize(14, 6)) # 第一个子图混合中英文 x np.linspace(0, 10, 100) y1 np.sin(x) y2 np.cos(x) ax1.plot(x, y1, labelsin(x)曲线, linewidth2) ax1.plot(x, y2, labelcos(x)波形, linewidth2, linestyle--) ax1.set_title(三角函数比较 Trigonometric Functions, fontsize16, pad20) ax1.set_xlabel(时间轴 Time Axis) ax1.set_ylabel(振幅 Amplitude) ax1.legend(title图例 Legend) ax1.grid(True, alpha0.3) # 第二个子图使用不同字体属性 ax2.bar([项目A, Project B, 任务C, Task D], [23, 45, 56, 34], color[#FF6B6B, #4ECDC4, #45B7D1, #96CEB4]) # 单独设置某些文本的字体 ax2.set_title(项目进度对比, fontdict{fontname: Source Han Sans SC, fontsize: 16, fontweight: bold}) # X轴标签使用默认字体中英文混合 ax2.set_xlabel(项目名称 Project Name) # Y轴标签使用稍小的字体 ax2.set_ylabel(完成百分比 (%), fontsize12) # 在图表中添加多语言注释 ax2.text(1, 50, 最高值\nPeak Value, fontsize10, hacenter, bboxdict(boxstyleround,pad0.3, facecoloryellow, alpha0.3)) plt.tight_layout() plt.show()这种混合字体配置的关键在于在rcParams中设置字体回退链使用fontdict参数单独设置特定文本的字体属性确保所有需要的字体都已正确安装经过这些配置你的Matplotlib图表应该能完美显示中文了。如果还有问题通常是字体缓存没有更新或者字体文件路径不正确。记住这个排查顺序先确认字体安装成功fc-list再检查Matplotlib缓存最后验证配置文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2425110.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…