在 在线 Python 运行工具(Python 3.12.7)中,除了使用系统预置的 Alibaba PuHuiTi
字体外,用户还可以上传并使用自定义字体。本文以教学为目的,逐步演示如何在浏览器环境中完成自定义字体的配置与使用。
一、为什么需要自定义字体?
- 系统默认字体风格不符合需求(如需使用思源黑体、站酷快乐体等)
- 需要统一品牌视觉(如使用企业专属字体)
- 教学中演示字体加载机制
⚠️ 注意:若仅需显示中文,推荐直接使用
Alibaba PuHuiTi
,无需额外操作。
二、操作步骤
步骤 1:准备字体文件
- 下载
.ttf
或.otf
格式的字体文件(如ZCOOLKuaiLe-Regular.ttf
) - 确保字体文件可合法使用(遵守授权协议)
步骤 2:上传字体到虚拟文件系统
- 在工具界面中点击 “文件列表” -> “上传文件” 按钮
- 选择本地字体文件(例如
myfont.ttf
) - 上传后,文件将位于当前环境虚拟目录(路径如
./myfont.ttf
)
步骤 3:在代码中注册并启用字体
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
# 1. 注册字体文件(路径需与上传位置一致)
font_path = './myfont.ttf' # 替换为实际文件名
fm.fontManager.addfont(font_path)
# 2. 获取字体名称(可选:用于验证)
font_prop = fm.FontProperties(fname=font_path)
font_name = font_prop.get_name()
print("已加载字体名称:", font_name)
# 3. 设置为默认 sans-serif 字体
plt.rcParams['font.sans-serif'] = [font_name]
plt.rcParams['axes.unicode_minus'] = False # 正常显示负号
# 4. 绘图测试
plt.figure(figsize=(6, 3))
plt.text(0.5, 0.5, "自定义字体示例", fontsize=20, ha='center')
plt.axis('off')
plt.show()
# 5. 保存图像
plt.savefig('custom_font_demo.png')
plt.close()
三、常见问题与调试
Q1:如何确认字体是否加载成功?
运行以下代码列出所有已加载字体中包含关键词的部分:
import matplotlib.font_manager as fm
# 查看所有字体名称
names = {f.name for f in fm.fontManager.ttflist}
print(sorted(names))
# 或搜索特定名称
target = "KuaiLe" # 替换为你期望的字体关键词
matches = [n for n in names if target.lower() in n.lower()]
print("匹配结果:", matches)
Q2:图像仍显示方框或乱码?
- 检查
font_path
是否正确(区分大小写,路径需完整) - 确认字体文件是 TrueType (.ttf) 或 OpenType (.otf) 格式
- 确保
plt.rcParams['font.sans-serif']
使用的是字体的 family name(非文件名)
Q3:能否同时使用多个自定义字体?
可以。重复调用 fm.fontManager.addfont()
注册多个字体,绘图时通过 FontProperties
指定:
from matplotlib import font_manager
prop1 = font_manager.FontProperties(fname='./font1.ttf')
prop2 = font_manager.FontProperties(fname='./font2.ttf')
plt.text(0.2, 0.5, "字体1", fontproperties=prop1)
plt.text(0.6, 0.5, "字体2", fontproperties=prop2)
四、示例:使用“站酷快乐体”显示中文
假设已上传 ZCOOLKuaiLe-Regular.ttf
:
下载链接:https://pan.baidu.com/s/15FMvEHiL_9T3JV71tw3e8Q?pwd=eb5y
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
# 注册字体
fm.fontManager.addfont('./ZCOOLKuaiLe-Regular.ttf')
# 设置默认字体
plt.rcParams['font.sans-serif'] = ['ZCOOL KuaiLe']
plt.rcParams['axes.unicode_minus'] = False
# 绘图
plt.figure(figsize=(5, 2))
plt.title("欢迎使用自定义字体!")
plt.text(0.5, 0.5, "Hello 中文", fontsize=24, ha='center')
plt.axis('off')
plt.show()
plt.savefig('zcool_demo.png')
plt.close()
✅ 成功关键:
'ZCOOL KuaiLe'
是该字体的 family name,可通过FontProperties(fname=...).get_name()
获取。
五、注意事项
- 会话隔离:关闭页面后,上传的字体文件将丢失,需重新上传。
- 性能影响:频繁注册字体可能影响执行速度,建议在脚本开头一次性完成。
- 版权合规:仅使用可免费商用或已获授权的字体文件。
- 不要覆盖系统字体:避免写
plt.rcParams['font.sans-serif'] = "SimHei"
,这会破坏预置中文字体支持。
六、总结
在在线 Python 环境中自定义 Matplotlib 字体,只需三步:上传 → 注册 → 设置。该流程不仅适用于个性化绘图,也是理解 Matplotlib 字体机制的有效教学手段。
本文链接:https://toolshu.com/article/8ttg4bsj
本作品采用 知识共享 署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。
加载中...