详解Matplotlib中文字符显示问题 您所在的位置:网站首页 page字体警告 详解Matplotlib中文字符显示问题

详解Matplotlib中文字符显示问题

2023-02-28 18:20| 来源: 网络整理| 查看: 265

文章目录 1.中文字体显示问题2.几种解决方案2.1.在绘图代码中设置全局字体2.2.在绘图代码中设置局部字体2.3.修改本机字符默认配置字体2.4.自动区别系统然后选择字体 3.其他3.1.platform模块3.2.常见中文字体文件名

1.中文字体显示问题

在用matplotlib进行绘图时,如果在绘制过程中会用到中文,则默认情况下会出现字体警告,中文字符显示为方框或乱码的形式,具体见下方案例:

import matplotlib.pyplot as plt import numpy as np # Data for plotting t = np.arange(-1.0, 1.0, 0.01) s = 1 + np.sin(2 * np.pi * t) fig, ax = plt.subplots() ax.plot(t, s) ax.set(xlabel='时间 (s)', ylabel='voltage (mV)', title='简单的标题') plt.show()

中文乱码

C:\Users\Gdc\anaconda3\lib\site-packages\matplotlib\backends\backend_agg.py:238: RuntimeWarning: Glyph 31616 missing from current font. font.set_text(s, 0.0, flags=flags) ...

我们可以看到在警告信息中提示“missing from current font”,直译就是“在当前字体中缺少(中文字符)”,大概含义就是默认的字体中不含中文字符。

对于这类问题,核心就是设置绘制图片时的字体参数包含全部的需要用到的字符。

2.几种解决方案

我们在解决中文字符显示问题时,有两类方案多种方式:方案1,在绘图代码中设置全局字符显示字体;方案2,在绘图代码中设置局部字体;方案3,修改本机字符默认配置的字体。

2.1.在绘图代码中设置全局字体

rcParams修改 font.sans-serif 或 font.family 对应字体

# 以下代码从全局设置字体为SimHei(黑体),解决显示中文问题【Windows】 # 设置font.sans-serif 或 font.family 均可 plt.rcParams['font.sans-serif'] = ['SimHei'] # plt.rcParams['font.family']=['SimHei'] # 解决中文字体下坐标轴负数的负号显示问题 plt.rcParams['axes.unicode_minus'] = False

由于mac电脑默认没有SimHei(黑体)字体,大家可以下载安装改字体或者修改为系统自带的字体如Arial Unicode MS,如下:

# 以下代码从全局设置字体为Arial Unicode MS,解决显示中文问题【mac】 # 设置font.sans-serif 或 font.family 均可 plt.rcParams['font.sans-serif'] = ['Arial Unicode MS'] # plt.rcParams['font.family']=['Arial Unicode MS'] # 解决中文字体下坐标轴负数的负号显示问题 plt.rcParams['axes.unicode_minus'] = False

rc方法,其实和设置rcParams 基本等效

# 设置font字典为 SimSun(宋体),大小为12(默认为10) font = {'family' : 'SimSun', 'size' : '12'} # 设置 字体 plt.rc('font', **font) # 解决中文字体下坐标轴负数的负号显示问题 plt.rc('axes', unicode_minus=False)

比如: rc('lines', linewidth=2, color='r') 等效于以下:

rcParams['lines.linewidth'] = 2 rcParams['lines.color'] = 'r' 2.2.在绘图代码中设置局部字体

FontProperties对象,这种情况下 不需要额外 处理负号 问题

import matplotlib.pyplot as plt import numpy as np # 引入matplotlib字体管理 FontProperties from matplotlib.font_manager import FontProperties # 设置我们需要用到的中文字体(字体文件地址) my_font = FontProperties(fname=r"c:\windows\fonts\SimHei.ttf", size=12) # Data for plotting t = np.arange(-1.0, 1.0, 0.01) s = 1 + np.sin(2 * np.pi * t) plt.plot(t, s) # 设置 x轴名称字体 plt.xlabel('时间 (s)', fontproperties=my_font) plt.ylabel('voltage (mV)') # 设置 标题字体 plt.title('简单的标题', fontproperties=my_font) plt.show()

FontProperties对象

直接设置fontproperties参数,这种情况下 也不需要额外 处理负号 问题

import matplotlib.pyplot as plt import numpy as np # Data for plotting t = np.arange(-1.0, 1.0, 0.01) s = 1 + np.sin(2 * np.pi * t) plt.plot(t, s) # 设置 x轴名称字体 黑体 SimHei plt.xlabel('时间 (s)', fontproperties='SimHei') plt.ylabel('voltage (mV)') # 设置 标题字体 微软雅黑 Microsoft YaHei plt.title('简单的标题', fontproperties='Microsoft YaHei') plt.show()

fontproperties参数

2.3.修改本机字符默认配置字体

除了以上的在代码中进行字体设置外,我们还可以直接修改本机字符默认配置字体,不过这种情况下代码只在本机适用咯。

In [1]: # 查看配置地址 ...: import matplotlib ...: print(matplotlib.matplotlib_fname()) C:\Users\Gdc\anaconda3\lib\site-packages\matplotlib\mpl-data\matplotlibrc

在以下地方**#font.sans-serif新增支持中文字符的字体如:SimSun(宋体),也可以直接修改#font.family: SimSun**

#font.family: sans-serif #font.sans-serif: SimSun,

修改默认字体 考虑到 中文字体下 负号的显示问题,同步需要修改**#axes.unicode_minus: False**

修改True为False

2.4.自动区别系统然后选择字体 import matplotlib.pyplot as plt import numpy as np import platform # 根据不同的操作系统设置对应的中文字体(苹果系统和Windows系统) system_font = {"Darwin": "Arial Unicode MS", "Windows": "SimHei"} plt.rcParams['font.family'] = [system_font.get(platform.system())] # 解决中文字体下坐标轴负数的负号显示问题 plt.rcParams['axes.unicode_minus'] = False # Data for plotting t = np.arange(-1.0, 1.0, 0.01) s = 1 + np.sin(2 * np.pi * t) fig, ax = plt.subplots() ax.plot(t, s) ax.set(xlabel='时间 (s)', ylabel='voltage (mV)', title='简单的标题') plt.show()

中文字符显示

3.其他 3.1.platform模块

platform模块给我们提供了很多方法去获取操作系统的相关信息。

参考文档:https://docs.python.org/3/library/platform.html

In [1]: import platform In [2]: platform.system() Out[2]: 'Windows' In [3]: platform.platform() Out[3]: 'Windows-10-10.0.18362-SP0' In [4]: platform.version() Out[4]: '10.0.18362' In [5]: platform.architecture() Out[5]: ('64bit', 'WindowsPE') In [6]: platform.machine() Out[6]: 'AMD64' In [7]: platform.node() Out[7]: 'Gdc-PC' In [8]: platform.processor() Out[8]: 'Intel64 Family 6 Model 94 Stepping 3, GenuineIntel' In [9]: platform.uname() Out[9]: uname_result(system='Windows', node='Gdc-PC', release='10', version='10.0.18362', machine='AMD64', processor='Intel64 Family 6 Model 94 Stepping 3, GenuineIntel') 3.2.常见中文字体文件名 中文字体字体文件名称宋体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


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有