小说网站开发流程具体,专业建站公司加盟,自己做网站需要什么技术,查企企官网Python Matplotlib 中直接加载本地字体文件
flyfish
python实现 绕过操作系统的字体库#xff0c;直接读取本地字体文件#xff0c;将其注册到 Matplotlib 的字体管理体系中
查找所有中文字体#xff08;含文件路径#xff09;
fc-list :langzh -f %{file}\n这…Python Matplotlib 中直接加载本地字体文件flyfishpython实现 绕过操作系统的字体库直接读取本地字体文件将其注册到 Matplotlib 的字体管理体系中查找所有中文字体含文件路径fc-list:langzh-f%{file}\n这里以NotoSansCJK-Regular.ttc字体文件举例NotoSansCJK-Regular.ttc介绍Noto字体项目名称No Tofu无豆腐块早期不同语言在系统中无对应字体时文字会显示为「□」豆腐块 / Tofu彻底解决「豆腐块」问题。Sans字体风格无衬线Sans Sans-serif无衬线是字体的外观风格「衬线Serif」字体笔画末端有装饰性小短线「无衬线Sans」笔画末端无装饰Noto Sans 适合屏幕显示Noto Serif衬线版适合印刷 / 文档。CJK语言覆盖范围全称Chinese Japanese Korean中、日、韩。中日韩三国文字共享大量汉字形异 / 音异 / 义异Noto 将这三种语言的字符整合到同一字体家族中避免单独设计多套字体同时保证字符风格统一。Noto CJK 还包含越南喃字等衍生字符是覆盖最完整的 CJK 开源字体。ttc 格式文件是 TrueType CollectionTrueType 字体集合是把多个 TTF 字体打包到一个文件里比如 NotoSansCJK-Regular.ttc 包含了简 / 繁 / 日 / 韩等 CJK 字体变体特征TTFTrueType FontTTCTrueType Collection本质单个字体文件多个 TTF 字体的「打包集合文件」文件内容仅包含一套字体如简体中文包含多套字体如简/繁/日/韩 CJK 变体体积较小单变体较大多变体打包一、复制 .ttc 字体文件到项目目录执行以下命令把系统中的NotoSansCJK-Regular.ttc复制到项目的fonts文件夹# 1. 新建fonts文件夹替换为你的项目路径比如~/my_plot_projectmkdir-p ~/my_plot_project/fonts# 2. 复制.ttc文件到fonts目录cp/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc ~/my_plot_project/fonts/二、Python 加载 .ttc 字体并绘制中文.ttc是字体集合加载时 Matplotlib 会自动识别其中的简体中文字体代码和加载.ttf几乎一致importosimportmatplotlib.pyplotaspltfrommatplotlibimportfont_manager# --------------------------# 1. 配置.ttc字体文件路径跨系统兼容# --------------------------# 注意文件名是NotoSansCJK-Regular.ttc和你找到的一致FONT_FILENotoSansCJK-Regular.ttcfont_pathos.path.join(os.path.dirname(os.path.abspath(__file__)),# 当前脚本所在目录fonts,FONT_FILE)# 验证文件是否存在避免路径错误ifnotos.path.exists(font_path):raiseFileNotFoundError(f字体文件不存在{font_path}\n请检查复制的路径是否正确)# --------------------------# 2. 注册.ttc字体并全局配置# --------------------------# 注册字体集合文件到Matplotlibfont_manager.fontManager.addfont(font_path)# 获取字体名称Matplotlib会自动识别.ttc中的简体中文字体font_namefont_manager.FontProperties(fnamefont_path).get_name()print(font_name)# 中文显示核心配置必加plt.rcParams[font.family]font_name# 全局默认用该中文字体plt.rcParams[axes.unicode_minus]False# 解决负号显示方块问题# --------------------------# 3. 绘图验证中文显示# --------------------------fig,axplt.subplots(figsize(8,5),dpi100)# 绘制示例数据含负号测试兼容性x[1,2,3,4,5]y[120,-50,200,80,-30]ax.plot(x,y,linewidth2,color#2E86AB,markero,label简体中文标签)# 所有文本直接写中文无需额外指定字体ax.set_title(标题NotoSansCJK-Regular.ttc 测试,fontsize16)ax.set_xlabel(横轴月份1-5月,fontsize12)ax.set_ylabel(纵轴销售额万元,fontsize12)ax.legend(locupper right)# 图例中文ax.text(3,150,注释负数值测试 -50.8,fontsize10)# 含负号的中文# 调整布局避免文字裁剪plt.tight_layout()# 保存图片跨系统打开均能显示中文plt.savefig(chinese_plot_ttc.png,dpi100)plt.show()# 验证加载的字体名称可选print(f成功加载的字体名称{font_name})# 输出示例Noto Sans CJK SC自动识别简体中文变体只需将fonts/NotoSansCJK-Regular.ttc和 Python 脚本一起打包目录结构如下my_plot_project/ ├── plot_chinese.py # 绘图脚本 └── fonts/ └── NotoSansCJK-Regular.ttc # 复制的.ttc字体文件