matplotlib部分中文字体的英文名

本文详细介绍了如何在Matplotlib库中正确设置字体属性,以解决在Python数据可视化过程中遇到的中文乱码问题。通过指定SimSun(宋体)、SimHei(黑体)等字体,可以确保x轴、y轴和标题正确显示中文内容。这对于进行中文报告或展示的数据图表制作至关重要。

import matplotlib.pyplot as plt

# ...

plt.xlabel("x轴", fontproperties="SimSun")# 步骤一 (宋体) 解决中文乱码,下同。
plt.ylabel("y轴", fontproperties="SimSun") # 步骤一    (宋体)
plt.title("标题", fontproperties="SimHei") #          (黑体)
plt.show()

【附录】

宋体     SimSun
黑体     SimHei
微软雅黑     Microsoft YaHei
微软正黑体     Microsoft JhengHei
新宋体     NSimSun
新细明体     PMingLiU
细明体     MingLiU
标楷体     DFKai-SB
仿宋     FangSong
楷体     KaiTi
隶书:LiSu
幼圆:YouYuan
华文细黑:STXihei
华文楷体:STKaiti
华文宋体:STSong
华文中宋:STZhongsong
华文仿宋:STFangsong
方正舒体:FZShuTi
方正姚体:FZYaoti
华文彩云:STCaiyun
华文琥珀:STHupo
华文隶书:STLiti
华文行楷:STXingkai
华文新魏:STXinwei

<think> 我们被要求解决matplotlib安装中文字体后可能遇到的问题及解决办法。根据引用内容,我们已知的常见解决方案是设置`plt.rcParams`来指定中文字体和解决负号显示问题。但是,用户在安装中文字体后可能还会遇到其他问题。我们需要结合引用和常见问题来回答。 常见问题可能包括: 1. 安装了中文字体,但设置后仍然不显示中文。 2. 设置中文字体后,负号显示为方块或其他异常。 3. 在Linux/WSL环境下可能遇到字体缓存问题。 4. 字体名称不正确导致设置无效。 引用内容: [^1]:提到需要设置字体,并提到在解决问题时遇到小问题。 [^2]:给出了设置SimHei(黑体)的代码,并设置`axes.unicode_minus`为False来解决负号问题。 [^3]:提到可以自由选择中英文字体切换,通过设置`font.family`为可用字体名称。 [^4]:在Linux(wsl2)上处理中文字体错误,同样使用了设置SimHei和`axes.unicode_minus`的方法。 根据这些引用,我们可以总结以下步骤和可能遇到的问题: 步骤1:安装中文字体(如果系统没有) 步骤2:在代码中设置matplotlib字体 步骤3:避免负号显示问题 安装后可能遇到的问题及解决办法: 问题1:设置了中文字体,但中文仍然显示为方框或乱码。 可能原因: - 字体名称不正确,系统找不到该字体。 - 字体缓存没有更新。 解决办法: - 确认字体名称:使用`matplotlib.font_manager`查看可用字体列表,确保使用正确的字体名称。 - 更新字体缓存:在命令行中执行以下命令(特别是Linux/WSL系统): ```bash rm -rf ~/.cache/matplotlib ``` 然后重新运行程序,或者使用代码: ```python import matplotlib.font_manager as fm fm._rebuild() ``` - 检查字体是否安装正确:确保字体文件已经放在系统的字体目录中(如Windows的`C:\Windows\Fonts`,Linux的`/usr/share/fonts/`,或者用户目录下的`.fonts`目录),并确保字体文件具有正确的权限。 问题2:设置了中文字体后,负号显示为方块。 解决办法: - 按照引用[2]和[4]的方法,设置: ```python plt.rcParams['axes.unicode_minus'] = False ``` 问题3:在Linux/WSL环境下,即使设置了中文字体,中文仍然不显示。 解决办法: - 确保系统安装了中文字体。例如,在Ubuntu中,可以安装字体包: ```bash sudo apt install fonts-wqy-microhei # 文泉驿微米黑 sudo apt install fonts-wqy-zenhei # 文泉驿正黑 ``` - 更新字体缓存:`sudo fc-cache -fv` - 然后重建matplotlib字体缓存(通过代码`fm._rebuild()`或删除缓存目录) 问题4:在代码中设置了字体,但部分文本(如图例)仍然不显示中文。 解决办法: - 有时候,图例的字体设置可能需要单独指定。可以在设置全局rcParams后,再单独设置图例的字体: ```python plt.legend(prop={'family': 'SimHei'}) ``` 或者,在设置全局参数时,确保设置生效,可以尝试在设置后重新加载默认设置(`plt.rcParams.update(plt.rcParamsDefault)`然后再设置?一般不推荐,因为会重置)。更常见的是,确保设置全局参数在创建任何图形元素之前。 问题5:使用Jupyter Notebook时,设置后可能不立即生效。 解决办法: - 在Notebook中,通常需要在每个需要设置字体的单元格中运行设置代码,或者使用魔术命令`%matplotlib inline`之后立即设置。 下面是一个示例代码,展示如何正确设置中文字体并避免常见问题: ```python import matplotlib.pyplot as plt import matplotlib.font_manager as fm # 设置中文字体,这里以黑体(SimHei)为例 plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签 plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号 # 如果上述设置不起作用,可以尝试以下步骤: # 1. 查看系统可用中文字体 # font_list = [f.name for f in fm.fontManager.ttflist] # 或者 # font_list = fm.findSystemFonts(fontpaths=None, fontext='ttf') # 然后选择一个中文字体,比如'Microsoft YaHei', 'SimHei', 'WenQuanYi Zen Hei'等 # 2. 重新构建字体缓存(如果字体是新安装的) # fm._rebuild() # 示例绘图 plt.figure() plt.plot([1, 2, 3], [1, 4, 9]) plt.xlabel('横坐标') plt.ylabel('纵坐标') plt.title('标题') plt.show() ``` 如果仍然遇到问题,可能需要检查系统是否确实安装了该字体,或者尝试其他中文字体名称。 注意:在有些情况下,可能需要指定字体的完整路径,特别是当字体不在标准系统目录时。例如: ```python # 指定字体文件路径 font_path = '/path/to/your/font.ttf' font_prop = fm.FontProperties(fname=font_path) # 然后在需要的地方使用fontproperties参数 plt.xlabel('横坐标', fontproperties=font_prop) ``` 总结:安装中文字体后,主要问题可能在于字体名称是否正确、字体缓存是否更新、以及负号设置。通过正确设置rcParams和更新缓存,大多数问题可以解决。 §§相关问题§§ 1. 如何查看matplotlib中已安装的字体列表? 2. 在matplotlib中如何为特定的文本元素(如标题、标签)单独设置字体? 3. 在Docker容器中运行matplotlib,如何解决中文显示问题? 4. 除了使用`plt.rcParams`全局设置,还有哪些方法可以在matplotlib中使用中文字体? </think> ### Matplotlib安装中文字体后的常见问题及解决方法 在Matplotlib中安装中文字体后,常见问题及解决方案如下: #### 1. **字体已安装但仍不显示中文** **原因**:Matplotlib未正确识别字体路径或未更新字体缓存 **解决方案**: ```python import matplotlib.font_manager as fm # 重建字体缓存 fm._rebuild() # 验证字体是否被识别 print([f.name for f in fm.fontManager.ttflist if 'Hei' in f.name]) # 检查黑体系列 ``` **操作步骤**: 1. 确认字体文件(.ttf)已放入系统字体目录: - Windows: `C:\Windows\Fonts\` - Linux: `~/.fonts/` 或 `/usr/share/fonts/` 2. 删除Matplotlib缓存: ```bash rm -r ~/.cache/matplotlib ``` #### 2. **负号显示为方块** **现象**:坐标轴负号"-"显示异常 **解决方案**: ```python plt.rcParams['axes.unicode_minus'] = False # 关闭unicode负号 ``` #### 3. **特定环境兼容问题** **WSL/Linux环境**: ```python # 添加字体路径直接调用 from matplotlib.font_manager import FontProperties font = FontProperties(fname='/path/to/yourfont.ttf') # 如'/usr/share/fonts/SimHei.ttf' plt.title('标题', fontproperties=font) ``` **Docker容器**:需在Dockerfile中安装字体: ```dockerfile RUN apt-get update && apt-get install -y fonts-wqy-zenhei ``` #### 4. **字体名称不匹配** **错误**:`findfont: Font family ['Hei'] not found` **解决方法**:查询系统准确字体名: ```python # 获取所有可用字体 [f.name for f in fm.fontManager.ttflist] # 输出示例:['SimHei', 'Microsoft YaHei', ...] ``` 在代码中使用实际检测到的名称: ```python plt.rcParams['font.sans-serif'] = ['实际字体名'] # 如'Microsoft YaHei' ``` #### 5. **部分文本不生效** **场景**:图例、注释等特殊元素未应用字体 **解决方案**:显式指定字体属性 ```python plt.legend(title='图例', prop={'family':'SimHei'}) plt.annotate('注释', xy=(0.5,0.5), fontproperties=font) ``` #### 完整配置示例 ```python import matplotlib.pyplot as plt import matplotlib as mpl # 基础配置 plt.rcParams['font.sans-serif'] = ['SimHei', 'Microsoft YaHei'] # 备选字体链 plt.rcParams['axes.unicode_minus'] = False # 修复负号 # 高级验证 fig, ax = plt.subplots() ax.plot([-1, 0, 1], [-1, 0, 1]) ax.set_title("中文标题测试 ✓") ax.set_xlabel("X轴-带负号") ax.text(0, 0, "文本测试", fontfamily='SimHei') plt.savefig('test.png', dpi=120) ``` > **关键提示**: > - 通过`matplotlib.font_manager.findfont('SimHei')`验证字体路径 > - 优先使用系统自带字体(如Windows的微软雅黑)避免安装问题 > - Jupyter环境中需重启内核使配置生效[^2][^4]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值