matplotlib中文字体设置宋体
时间: 2025-05-24 19:05:07 浏览: 13
### 设置 Matplotlib 的中文字体为宋体
要在 Matplotlib 中将中文字体设置为宋体,可以通过以下方式实现:
#### 方法一:通过 `rcParams` 配置全局字体
Matplotlib 提供了一个配置字典 `rcParams`,可以用来设置全局默认参数。要将中文字体设置为宋体,可以在脚本开头加入以下代码[^1]:
```python
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimSun'] # 设置中文字体为宋体
plt.rcParams['axes.unicode_minus'] = False # 解决负号 '-' 显示为方块的问题
```
这段代码的作用是告诉 Matplotlib 使用名为 `'SimSun'` 的字体来渲染中文字符,并解决可能存在的负号显示异常问题。
---
#### 方法二:动态指定字体属性
如果只需要局部调整某个图表的字体,可以直接在绘图命令中传递字体属性。例如,在调用 `text()` 或其他文本相关函数时传入自定义的字体字典[^2]:
```python
import numpy as np
import matplotlib.pyplot as plt
# 定义字体属性
font = {
'family': 'SimSun', # 设置字体为宋体
'size': 14,
'color': 'black'
}
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.title('正弦波形', fontdict=font) # 动态设置标题字体
plt.xlabel('时间 (秒)', fontdict=font) # 动态设置 X 轴标签字体
plt.ylabel('振幅', fontdict=font) # 动态设置 Y 轴标签字体
plt.show()
```
这种方法适用于仅需临时更改某些特定部分字体的情况。
---
#### 方法三:手动加载字体文件
如果系统未预装宋体或其他所需字体,或者希望更灵活地管理字体资源,则可通过 `FontProperties` 手动加载 TTF 文件[^3]。以下是具体操作步骤:
```python
from matplotlib.font_manager import FontProperties
import matplotlib.pyplot as plt
# 加载本地字体文件(假设路径为 '/path/to/SimSun.ttf')
fp = FontProperties(fname='/path/to/SimSun.ttf')
x = [1, 2, 3]
y = [4, 5, 6]
plt.plot(x, y)
plt.title('测试标题', fontproperties=fp) # 使用加载的字体
plt.xlabel('横轴', fontproperties=fp)
plt.ylabel('纵轴', fontproperties=fp)
plt.show()
```
注意:此方法需要提供有效的 `.ttf` 字体文件路径。
---
#### 常见问题排查
1. **确认系统已安装宋体**
如果运行以上代码仍无法正常显示宋体,请先检查操作系统是否已经安装了 SimSun 字体。如果没有安装,可以从官方渠道下载并安装该字体。
2. **验证可用字体列表**
可以打印当前环境中所有可用字体名称,确保 `'SimSun'` 存在于其中[^1]:
```python
from matplotlib import font_manager
fonts = sorted([f.name for f in font_manager.fontManager.ttflist])
print(fonts)
```
3. **保存图像时丢失字体样式**
当保存图像到文件时,可能会因为缺少嵌入字体而导致效果不一致。建议在保存前显式启用字体嵌入选项:
```python
plt.savefig('output.png', dpi=300, bbox_inches='tight', format='png')
```
---
### 总结
通过上述三种方法之一即可成功将 Matplotlib 的中文字体设置为宋体。推荐优先尝试方法一(全局配置),因为它简单高效;对于特殊需求场景则可以选择方法二或方法三。
阅读全文
相关推荐

















