12人参与 • 2025-07-14 • Windows
遇到的字体显示问题,我将为您详细介绍如何在windows系统下配置matplotlib以正确显示中文,并提供完整的解决方案。
常见的中文字体显示问题包括:
userwarning: findfont: font family 'simhei' not found
首先,我们需要确认系统中已安装的中文字体:
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}")
如果未找到中文字体,请按照以下步骤操作:
simhei.ttf
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()
创建一个python脚本,内容如下:
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()
import matplotlib print(matplotlib.matplotlib_fname())
通常输出为:c:\python39\lib\site-packages\matplotlib\mpl-data\matplotlibrc
font.family : sans-serif font.sans-serif : simhei, microsoft yahei, dejavu sans, bitstream vera sans, ... sans-serif axes.unicode_minus : false
import matplotlib.pyplot as plt from matplotlib.font_manager import _rebuild _rebuild() # 清除字体缓存
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()
原因:matplotlib未找到合适的中文字体 解决:
.cache
文件原因:某些字体不包含完整的中文字符集 解决:
建议做法:
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']
运行以下代码验证字体配置是否成功:
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()
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()
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中文字体显示问题的详细教程的详细内容,更多关于windows matplotlib中文字体显示问题的资料请关注代码网其它相关文章!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论