You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Matplotlib同一坐标轴刻度标签中使用多字体实现英印地语混显?

解决混淆矩阵坐标轴同时显示英文与印地语字符的问题

我明白你想在混淆矩阵的X/Y轴刻度标签上同时展示英文和印地语字符,但目前设置Lohit Devanagari字体后没达到预期效果——别担心,咱们一步步来搞定这个问题。

问题根源

单独给xticks/yticks指定字体时,可能遇到两个核心问题:

  • 所选字体(比如Lohit Devanagari)对英文字符的支持不够完善,或者Matplotlib的渲染逻辑没有正确识别混合字符的字体需求;
  • 仅设置fontname可能没有覆盖到所有文本渲染环节,导致部分字符仍用默认字体显示。

具体解决方案

1. 使用同时支持双语言的字体(推荐)

优先选择同时包含英文和印地语字符集的字体,比如谷歌开源的Noto Sans Devanagari,它专门为多语言场景设计,能完美适配混合文本。

操作步骤:
  • 先确认系统已安装该字体:
    • Ubuntu/Debian:执行sudo apt install fonts-noto-devanagari
    • Windows/macOS:直接从官方渠道下载安装即可
  • 全局配置Matplotlib使用该字体(比单独设置刻度更稳定):
import matplotlib.pyplot as plt

# 全局设置字体,优先用Noto Sans Devanagari, fallback到系统默认无衬线字体
plt.rcParams['font.family'] = ['Noto Sans Devanagari', 'sans-serif']
plt.rcParams['font.size'] = 6  # 匹配你需要的labelsize

2. 单独为刻度标签设置字体(如果需要局部调整)

如果你不想全局修改字体,可以手动为刻度标签指定支持双语言的字体,同时确保你的标签字符串是正确的混合格式:

# 示例:混合英文与印地语的刻度标签
tick_labels = ["Cat (बिल्ली)", "Dog (कुत्ता)", "Bird (पक्षी)"]

# 重新设置X/Y轴刻度标签并指定字体
ax.set_xticklabels(tick_labels, fontname='Noto Sans Devanagari', fontsize=6)
ax.set_yticklabels(tick_labels, fontname='Noto Sans Devanagari', fontsize=6)

3. 保留你的刻度显示设置

你之前开启两侧刻度的代码是正确的,直接保留即可:

ax.tick_params(labeltop=True, labelright=True, labelsize=6)
ax.yaxis.set_ticks_position('both')
ax.xaxis.set_ticks_position('both')

额外验证小技巧

如果还是有问题,可以先打印一下当前Matplotlib可用的字体列表,确认目标字体是否被识别:

import matplotlib.font_manager as fm
for font in fm.findSystemFonts(fontpaths=None, fontext='ttf'):
    if 'Devanagari' in font or 'Noto' in font:
        print(fm.FontProperties(fname=font).get_name())

内容的提问来源于stack exchange,提问作者PeacefulDaemon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:04:12