Skip to content

Matplotlib 设置中文显示 #433

@twn39

Description

@twn39

将系统字体添加到字体库:

import matplotlib
from matplotlib import font_manager

font_files = matplotlib.font_manager.findSystemFonts('/usr/share/fonts/opentype/noto')
for font_file in font_files:
    print(font_file)
    font_manager.fontManager.addfont(font_file)

显示字体:

> matplotlib.font_manager.get_font_names()

['STIXSizeTwoSym',
 'cmmi10',
 'cmss10',
 'STIXSizeFiveSym',
 'STIXSizeFourSym',
 'cmb10',
 'cmtt10',
 'DejaVu Sans Mono',
 'DejaVu Serif Display',
 'STIXSizeOneSym',
 'Noto Sans CJK JP',
 'DejaVu Sans',
 'STIXGeneral',
 'STIXNonUnicode',
 'cmex10',
 'DejaVu Sans Display',
 'cmr10',
 'cmsy10',
 'DejaVu Serif',
 'STIXSizeThreeSym',
 'Noto Serif CJK JP']

设置字体:

import matplotlib.pyplot as plt
import seaborn as sns

plt.style.use('seaborn-v0_8')
plt.rcParams['font.family'] = ['Noto Sans CJK JP']  # 需要放在 plt.style.use 后面覆盖默认字体
plt.rcParams['axes.unicode_minus'] = False

注:这里的 plt.rcParams['font.family'] 名称与字体文件的名称不是同一个,需要通过 matplotlib.font_manager.get_font_names() 打印出来确认,系统文件中 Noto Serif CJK 包含中文简体,但是名称输出只有 Noto Serif CJK JP,因此 font.family 设置为 Noto Sans CJK JP ,同样可以正确显示中文

测试:

import matplotlib.pyplot as plt

plt.plot([1, 2, 3], [4, 5, 6])
plt.xlabel('X 轴')
plt.ylabel('Y 轴')
plt.title('带有中文的标题')
plt.show()

WX20241230-100236@2x

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions