Windows环境下解决Matplotlib中文字体显示问题的详细教程!

Windows环境下解决Matplotlib中文字体显示问题的详细教程!

作者:Bruce_xiaowei
本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并提供验证步骤与常见问题解决方案,需要的朋友可以参考下。

引言

遇到的字体显示问题,我将为您详细介绍如何在Windows系统下配置Matplotlib以正确显示中文,并提供完整的解决方案。

问题分析

常见的中文字体显示问题包括:

  1. 中文字符显示为方框
  2. 报错:UserWarning: findfont: Font family 'SimHei' not found
  3. 图表标题或标签乱码

解决方案详解

1. 检查系统已安装字体

首先,我们需要确认系统中已安装的中文字体:

1
2
3
4
5
6
7
8
9
10
11
12
13
import matplotlib.pyplot as plt
import matplotlib
# 显示当前Matplotlib使用的字体目录
print("字体缓存目录:", matplotlib.get_cachedir())
print("字体配置文件路径:", matplotlib.matplotlib_fname())
# 列出所有可用字体
from matplotlib.font_manager import fontManager
for font in fontManager.ttflist:
if 'simhei' in font.name.lower() or 'ming' in font.name.lower() or 'kai' in font.name.lower():
print(f"字体名称: {font.name}, 路径: {font.fname}")

2. 手动添加中文字体(以SimHei为例)

如果未找到中文字体,请按照以下步骤操作:

步骤 1: 安装字体

  1. 从网上下载SimHei字体(黑体)文件simhei.ttf
  2. 右键点击字体文件 -> 为所有用户安装

步骤 2: 更新Matplotlib字体缓存

1
2
3
4
5
6
7
8
9
10
11
12
13
import matplotlib.pyplot as plt
import shutil
import matplotlib
# 获取Matplotlib字体目录
font_dir = matplotlib.get_data_path() + "\\fonts\\ttf"
# 复制字体文件到Matplotlib字体目录(假设字体文件在C:\Windows\Fonts\simhei.ttf)
shutil.copy("C:\\Windows\\Fonts\\simhei.ttf", font_dir)
# 清除字体缓存
from matplotlib.font_manager import _rebuild
_rebuild()

3. 配置Matplotlib使用中文字体

创建一个Python脚本,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
# 设置中文字体和解决负号显示问题
plt.rcParams['font.sans-serif'] = ['SimHei', 'Microsoft YaHei', 'FangSong'# 使用黑体和微软雅黑
plt.rcParams['axes.unicode_minus'] = False  # 解决负号-显示为方块的问题
# 测试绘图
def test_chinese_font():
plt.figure(figsize=(8, 4))
plt.text(0.5, 0.5, '你好,世界!Hello, 世界!',
fontsize=24, ha='center', va='center')
plt.axis('off')
plt.title('中文字体显示测试')
plt.show()
if __name__ == "__main__":
test_chinese_font()

4. 修改Matplotlib配置文件(永久生效)

  1. 找到配置文件路径:
1
2
import matplotlib
print(matplotlib.matplotlib_fname())

通常输出为:C:\Python39\lib\site-packages\matplotlib\mpl-data\matplotlibrc

  1. 编辑该文件,修改以下几行:
1
2
3
font.family         : sans-serif
font.sans-serif     : SimHei, Microsoft YaHei, DejaVu Sans, Bitstream Vera Sans, ... sans-serif
axes.unicode_minus  : False
  1. 清除缓存:
1
2
3
4
import matplotlib.pyplot as plt
from matplotlib.font_manager import _rebuild
_rebuild()  # 清除字体缓存

5. 高级配置(支持更多字体)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
# 指定字体路径(适用于字体不在系统路径的情况)
font_path = "C:/Windows/Fonts/simhei.ttf"
chinese_font = FontProperties(fname=font_path, size=12)
# 测试多种字体
def test_multiple_fonts():
fonts = {
'SimHei': '黑体',
'Microsoft YaHei': '微软雅黑',
'FangSong': '仿宋',
'KaiTi': '楷体',
'SimSun': '宋体'
}
plt.figure(figsize=(12, 6))
for i, (font_name, chinese_name) in enumerate(fonts.items()):
try:
plt.text(0.1, 0.8 - i*0.15, f'{chinese_name}: {font_name}',
fontproperties=FontProperties(family=font_name),
fontsize=16)
except Exception as e:
plt.text(0.1, 0.8 - i*0.15, f'{chinese_name}: {font_name} (加载失败)',
fontsize=16, color='red')
plt.axis('off')
plt.title('中文字体测试')
plt.show()
if __name__ == "__main__":
test_multiple_fonts()

常见问题及解决方法

问题1:字体显示为英文

原因:Matplotlib未找到合适的中文字体解决

  1. 确认字体已安装
  2. 检查字体名称是否正确
  3. 清除字体缓存目录下的所有.cache文件

问题2:中文部分字符显示正常,部分显示异常

原因:某些字体不包含完整的中文字符集解决

  1. 尝试更换字体,如用微软雅黑替代黑体
  2. 使用思源黑体等更全面的字体
  3. 确保使用UTF-8编码保存脚本

问题3:Linux与Windows跨平台显示不一致

建议做法

1
2
3
4
5
6
7
8
9
10
import platform
import matplotlib.pyplot as plt
# 根据操作系统自动选择字体
if platform.system() == 'Windows':
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'SimHei'# Windows
elif platform.system() == 'Linux':
plt.rcParams['font.sans-serif'] = ['WenQuanYi Zen Hei', 'Noto Sans CJK'# Linux
else# macOS
plt.rcParams['font.sans-serif'] = ['PingFang HK', 'Arial Unicode MS']

验证步骤

运行以下代码验证字体配置是否成功:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import matplotlib.pyplot as plt
import numpy as np
def create_test_chart():
# 准备数据
x = np.linspace(0, 10, 100)
y = np.sin(x)
# 创建图表
plt.figure(figsize=(10, 6))
plt.plot(x, y, label="正弦曲线")
# 添加中文标签和标题
plt.title("Matplotlib 中文支持测试图表")
plt.xlabel("X轴标签示例")
plt.ylabel("Y轴标签示例")
plt.legend()
# 显示网格
plt.grid(True)
# 显示图表
plt.show()
if __name__ == "__main__":
create_test_chart()

高级技巧

1. 动态字体选择(根据系统环境自动适配)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import matplotlib.pyplot as plt
import platform
def auto_configure_chinese():
system = platform.system()
if system == 'Windows':
# Windows系统常用中文字体
fonts = ['Microsoft YaHei', 'SimHei', 'FangSong', 'KaiTi']
elif system == 'Linux':
# Linux系统常用中文字体(需要安装)
fonts = ['WenQuanYi Zen Hei', 'Noto Sans CJK', 'Droid Sans Fallback']
else# macOS
# macOS系统内置中文字体
fonts = ['PingFang HK', 'Arial Unicode MS', 'Apple LiGothic Medium']
# 设置字体
plt.rcParams['font.sans-serif'] = fonts
plt.rcParams['axes.unicode_minus'] = False
# 在脚本开始处调用此函数
auto_configure_chinese()

2. 字体回退机制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
from matplotlib.font_manager import FontProperties, findfont
def get_chinese_font(size=12):
"""获取可用的中文字体"""
for font_name in ['Microsoft YaHei', 'SimHei', 'FangSong', 'KaiTi']:
try:
return FontProperties(family=font_name, size=size)
except Exception:
continue
# 如果找不到任何中文字体,返回默认字体
return None
def safe_plot():
font = get_chinese_font()
plt.figure(figsize=(8, 4))
if font:
plt.text(0.5, 0.5, '你好,世界!',
fontproperties=font,
fontsize=24, ha='center', va='center')
else:
plt.text(0.5, 0.5, '警告:未找到中文字体',
fontsize=24, ha='center', va='center', color='red')
plt.axis('off')
plt.title('字体检测结果')
plt.show()
safe_plot()

通过以上步骤,您应该能够完全解决Matplotlib在Windows环境下的中文字体显示问题。如果问题仍然存在,请检查字体文件的完整性和系统权限设置。

以上就是Windows环境下解决Matplotlib中文字体显示问题的详细教程的详细内容。

 

学习资料见知识星球。

以上就是今天要分享的技巧,你学会了吗?若有什么问题,欢迎在下方留言。

快来试试吧,小琥 my21ke007。获取 1000个免费 Excel模板福利​​​​!

更多技巧, www.excelbook.cn

欢迎 加入 零售创新 知识星球,知识星球主要以数据分析、报告分享、数据工具讨论为主;

Excelbook.cn Excel技巧 SQL技巧 Python 学习!

你将获得:

1、价值上万元的专业的PPT报告模板。

2、专业案例分析和解读笔记。

3、实用的Excel、Word、PPT技巧。

4、VIP讨论群,共享资源。

5、优惠的会员商品。

6、一次付费只需129元,即可下载本站文章涉及的文件和软件。

文章版权声明 1、本网站名称:Excelbook
2、本站永久网址:http://www.excelbook.cn
3、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长王小琥进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报。
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。

THE END
分享
二维码
< <上一篇
下一篇>>