python pyplot 输出支持中文
环境MACOS
我在使用pyplot输出支持中文的问题,在使用matplotlib绘图时遇到了中文显示为方块或者乱码的问题。
先尝试再windows下是否可以解决,
在 Python 的 Matplotlib 中使用 pyplot 输出中文时,默认字体可能不支持中文显示(会出现方块或乱码)。以下是让 pyplot支持中文的完整方法:
方法 1:动态指定字体
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties# 指定中文字体路径(替换为你系统的字体路径)
#font_path = 'C:/Windows/Fonts/simhei.ttf' # Windows 黑体路径
font_path = '/System/Library/Fonts/STHeiti Medium.ttc' # macOS 黑体-简路径
# font_path = '/usr/share/fonts/truetype/wqy/wqy-microhei.ttc' # Linux 文泉驿微米黑# 创建字体属性对象
chinese_font = FontProperties(fname=font_path)# 示例绘图
plt.plot([1, 2, 3], [4, 5, 6])
plt.title("中文标题示例", fontproperties=chinese_font)
plt.xlabel("X轴标签", fontproperties=chinese_font)
plt.ylabel("Y轴标签", fontproperties=chinese_font)
plt.show()
方法 2:全局设置中文字体
import matplotlib.pyplot as plt# 设置全局中文字体(以 "SimHei" 为例,适用于 Windows)
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置默认字体为黑体
plt.rcParams['axes.unicode_minus'] = False # 解决负号 "-" 显示为方块的问题# 示例绘图
plt.plot([1, 2, 3], [4, 5, 6])
plt.title("中文标题示例")
plt.xlabel("X轴标签")
plt.ylabel("Y轴标签")
plt.show()
常见中文字体名称对照表
操作系统 | 字体名称 | 字体文件路径示例 |
---|---|---|
Windows | SimHei(黑体) | C:/Windows/Fonts/simhei.ttf |
Windows | Microsoft YaHei(微软雅黑) | C:/Windows/Fonts/msyh.ttc |
macOS | STHeiti(华文黑体) | /System/Library/Fonts/STHeiti Medium.ttc` |
Linux | WenQuanYi Micro Hei | /usr/share/fonts/truetype/wqy/wqy-microhei.ttc |
验证是否生效
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm# 查看已加载的字体列表
font_list = fm.findSystemFonts()
chinese_fonts = [f for f in font_list if any(keyword in f.lower() for keyword in ['hei', 'yahei', 'song', 'kai'])]
print("支持的中文字体路径:", chinese_fonts)
常见问题解决
-
字体路径错误:
- 确保 font_path指向真实的字体文件(如 Windows 下 simhei.ttf 路径为 C:/Windows/Fonts/simhei.ttf)。
-
字体缓存未更新:
- 清除 Matplotlib 缓存(运行以下代码后重启 Python):
import matplotlib matplotlib._get_cachedir() # 查看缓存路径,手动删除该目录
- 清除 Matplotlib 缓存(运行以下代码后重启 Python):
-
系统缺少中文字体:
- Linux 安装中文字体包:
sudo apt-get install fonts-wqy-microhei # 文泉驿微米黑
- Linux 安装中文字体包:
完整示例(带中文输出)
import matplotlib.pyplot as plt
import numpy as np# 设置全局中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False# 生成数据
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)# 绘制图形
plt.figure(figsize=(8, 4))
plt.plot(x, y, label='正弦曲线')
plt.title("中文标题示例")
plt.xlabel("X轴(角度)")
plt.ylabel("Y轴(振幅)")
plt.legend()
plt.grid(True)
plt.show()
通过上述方法,可以确保 pyplot
正确显示中文标题、标签和图例。