Matplotlib 中设置自定义中文字体的正确姿势

简介: 【11月更文挑战第16天】Matplotlib 默认不支持中文字体显示,需手动配置。方法包括:1) 修改全局字体设置,适用于整个脚本;2) 局部设置特定元素的字体;3) 使用系统字体名称,但可能因系统而异。通过这些方法可以有效解决中文乱码问题,确保图表中文本的正确显示。

  1. 了解 Matplotlib 字体相关知识
  • Matplotlib 默认不支持中文字体显示,会出现中文乱码的情况。这是因为 Matplotlib 在渲染文本时,使用的字体库没有包含中文字体。
  • Matplotlib 使用rcParams来控制各种默认参数,包括字体相关的参数。
  1. 方法一:修改全局字体设置(适用于整个脚本或笔记本)
  • 步骤一:找到中文字体文件路径
  • 首先需要确定你想要使用的中文字体文件的位置。在 Windows 系统中,字体文件通常位于C:\Windows\Fonts目录下;在 Linux 系统中,字体文件一般在/usr/share/fonts/usr/local/share/fonts等目录下。
  • 步骤二:修改rcParams设置
  • 假设你要使用宋体(SimSun)字体,并且字体文件路径为C:\Windows\Fonts\simsun.ttc(这是在 Windows 系统下的路径示例)。
  • 在 Python 脚本或 Jupyter Notebook 的开头添加以下代码:


import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
# 设置字体路径
font_path = 'C:\\Windows\\Fonts\\simsun.ttc'
font = FontProperties(fname = font_path, size = 12)
plt.rcParams['font.family'] = font.get_name()


  • 这里首先导入了plt(Matplotlib 的绘图模块)和FontProperties(用于管理字体属性)。然后指定了字体路径font_path,并通过FontProperties创建了字体对象font,其包含字体名称和大小等属性。最后,将plt.rcParams['font.family']设置为该字体的名称,这样在整个脚本或笔记本中的所有图形绘制都会使用这个中文字体。


  1. 方法二:仅在特定元素中使用自定义字体(局部设置)
  • 步骤一:找到字体文件路径并加载字体
  • 同样先找到字体文件路径,例如还是使用宋体(SimSun),字体文件路径为C:\Windows\Fonts\simsun.ttc
  • 在绘图代码中添加以下内容来加载字体:


from matplotlib.font_manager import FontProperties
font_path = 'C:\\Windows\\Fonts\\simsun.ttc'
font_prop = FontProperties(fname = font_path)


  • 步骤二:在绘图元素中应用字体
  • 假设你要绘制一个柱状图,并且要为坐标轴标签设置中文字体。示例代码如下:


import matplotlib.pyplot as plt
import numpy as np
x = np.array([1, 2, 3, 4])
y = np.array([10, 20, 30, 40])
font_path = 'C:\\Windows\\Fonts\\simsun.ttc'
font_prop = FontProperties(fname = font_path)
plt.bar(x, y)
plt.xlabel("类别", fontproperties = font_prop)
plt.ylabel("数量", fontproperties = font_prop)
plt.show()


  • 这里在xlabelylabel函数中通过fontproperties参数传入了之前加载的字体属性font_prop,使得坐标轴标签使用了自定义的中文字体,而其他部分(如标题、图例等)如果没有特别设置,仍然使用默认字体。


  1. 方法三:使用系统字体名称(更简便,但可能因系统而异)
  • 步骤一:确定系统中文字体名称
  • 在某些操作系统中,可以直接使用系统中文字体的名称来设置 Matplotlib 的字体。例如,在 Windows 系统中,宋体的名称可能是SimSun
  • 步骤二:修改rcParams或局部应用字体名称
  • 全局修改


import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'SimSun'


  • 局部修改


import matplotlib.pyplot as plt
plt.xlabel("类别", fontfamily='SimSun')


  • 这种方法比较简便,但需要注意字体名称可能因系统和字体安装情况而有所不同,可能会出现找不到字体的情况。而且在一些跨平台的项目中,这种方法的稳定性可能不如前两种方法。
相关文章
|
3月前
|
数据可视化 Python Windows
Matplotlib输出中文显示的2种解决方案
Matplotlib输出中文显示的2种解决方案
138 0
|
6月前
|
Python
matplotlib中改变字体的方法
matplotlib中改变字体的方法
|
7月前
R语言作图不显示中文解决办法,如何使用中文字体
R语言作图不显示中文解决办法,如何使用中文字体
python 绘图中的一些小技巧(显示中文标签,显示负号,共用x轴,设置轴的属性。。。)
python 绘图中的一些小技巧(显示中文标签,显示负号,共用x轴,设置轴的属性。。。)
|
缓存 Ubuntu Python
解决matplotlib中文显示问题
解决matplotlib中文显示问题
|
Python
matplotlib绘图中文乱码问题
matplotlib绘图中文乱码问题
1593 0
|
Python
Pycharm使用matplotlib绘图时无法显示中文问题
Pycharm使用matplotlib绘图时无法显示中文问题
151 0
|
Python
避免Matplotlib绘图中文乱码
本文介绍避免Matplotlib绘图出现中文乱码问题的解决方案。
218 0
避免Matplotlib绘图中文乱码
|
机器学习/深度学习 Python
自动美化你的Matplotlib ,使用Seaborn控制图表的默认值(二)
自动美化你的Matplotlib ,使用Seaborn控制图表的默认值(二)
261 0
自动美化你的Matplotlib ,使用Seaborn控制图表的默认值(二)
|
数据可视化 Python
自动美化你的Matplotlib ,使用Seaborn控制图表的默认值(一)
自动美化你的Matplotlib ,使用Seaborn控制图表的默认值(一)
90 0
自动美化你的Matplotlib ,使用Seaborn控制图表的默认值(一)