在使用 Matplotlib 绘图时,如果图中包含中文字符,可能会遇到中文无法正常显示的问题。这通常是因为默认的字体不支持中文。为了解决这个问题,你可以通过以下几种方法来设置 Matplotlib 使用支持中文的字体。
1. 设置 Matplotlib 使用支持中文的字体
Matplotlib 允许你自定义字体,通过 matplotlib.rcParams
来设置字体。
1.1 设置全局字体为支持中文的字体
可以通过 rcParams
设置字体为常见的中文字体(例如 SimHei
、Microsoft YaHei
、STHeiti
等)。
import matplotlib.pyplot as plt
import matplotlib# 设置中文字体
matplotlib.rcParams['font.family'] = 'Microsoft YaHei' # 或者 'SimHei', 'STHeiti' 等
matplotlib.rcParams['axes.unicode_minus'] = False # 处理负号显示问题# 绘制包含中文的图表
plt.plot([1, 2, 3], [1, 4, 9])
plt.title('中文标题')
plt.xlabel('横坐标')
plt.ylabel('纵坐标')
plt.show()
在上述代码中,我们设置了 font.family
为支持中文的字体 'Microsoft YaHei'
,并通过 axes.unicode_minus
解决负号显示问题。你可以根据自己系统中安装的字体进行选择。
1.2 查看系统中可用的中文字体
如果你不确定使用哪个字体,可以查看系统中安装的所有字体。以下是一个简单的代码片段,用于查看系统中所有可用的字体:
import matplotlib.font_manager as fm# 获取所有字体路径
font_paths = fm.findSystemFonts()# 打印所有可用字体
for font in font_paths:print(fm.FontProperties(fname=font).get_name())
运行此代码后,你可以查看你系统中安装的所有字体,并选择一个支持中文的字体。
2. 直接设置特定字体
如果你知道系统中有一个支持中文的字体文件(如 .ttf
文件),你也可以通过指定字体路径来加载它。
import matplotlib.pyplot as plt
from matplotlib import font_manager# 指定字体路径
font_path = '/path/to/your/font.ttf' # 替换为你的字体路径
font_prop = font_manager.FontProperties(fname=font_path)# 设置字体
plt.title('中文标题', fontproperties=font_prop)
plt.xlabel('横坐标', fontproperties=font_prop)
plt.ylabel('纵坐标', fontproperties=font_prop)# 绘制图表
plt.plot([1, 2, 3], [1, 4, 9])
plt.show()
替换 font_path
为你所选中文字体文件的路径。
3. 处理负号显示问题
在某些系统中,负号(-
)在坐标轴或标签中可能无法正确显示。通过设置 axes.unicode_minus
为 False
,可以解决这一问题:
import matplotlib.pyplot as plt
import matplotlib# 设置中文字体和负号处理
matplotlib.rcParams['font.family'] = 'Microsoft YaHei' # 设置中文字体
matplotlib.rcParams['axes.unicode_minus'] = False # 解决负号显示问题# 绘图
plt.plot([1, 2, 3], [-1, -4, -9])
plt.title('负号测试')
plt.show()
4. 常见的中文字体
- Windows 系统:
'Microsoft YaHei'
'SimHei'
'NSimSun'
- macOS 系统:
'Heiti SC'
'PingFang SC'
- Linux 系统:
'WenQuanYi Zen Hei'
'AR PL UMing CN'
5. 检查字体是否安装
如果你选择的字体无法显示,可能是该字体在你的系统中没有安装。你可以通过操作系统的字体管理工具来安装相关字体。
总结
通过设置 matplotlib.rcParams
中的 font.family
和 axes.unicode_minus
,你可以轻松解决中文显示不正常的问题,并确保图表中的中文和负号正确显示。你也可以通过指定字体文件路径来使用其他特定字体。