Matplotlib中文乱码的3种解决方案


Posted in Python onNovember 15, 2018

前言

Matplotlib是一个Python 2D绘图库,它可以在各种平台上以各种硬拷贝格式和交互式环境生成出具有出版品质的图形。 Matplotlib可用于Python脚本,Python和IPython shell,Jupyter笔记本,Web应用程序服务器和四个图形用户界面工具包。

然而最近在使用matplotlib默认情况会出现乱码问题,原则上matplotlib是支持中文的,只是在配置信息里没有中文字体的相关信息。

解决方法如下:

解决方案一:修改配置文件

matplotlib 从配置文件 matplotlibrc 中读取配置,字体相关内容也在其中。查询当前matplotlibrc 所在目录,可以用 get_configdir()函数:

import matplotlib
matplotlib.get_configdir()

通常存放位置:lib\site-packages\matplotlib\mpl-data\matplotlibrc

涉及到字体部分的设置内容为:

#font.family : sans-serif
#font.style : normal
#font.variant : normal
#font.weight : normal
#font.stretch : normal
## note that font.size controls default text sizes. To configure
## special text sizes tick labels, axes, labels, title, etc, see the rc
## settings for axes and ticks. Special text sizes can be defined
## relative to font.size, using the following values: xx-small, x-small,
## small, medium, large, x-large, xx-large, larger, or smaller
#font.size : 10.0
#font.serif : DejaVu Serif, Bitstream Vera Serif, Computer Modern Roman, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif
#font.sans-serif : DejaVu Sans, Bitstream Vera Sans, Computer Modern Sans Serif, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
#font.cursive : Apple Chancery, Textile, Zapf Chancery, Sand, Script MT, Felipa, cursive
#font.fantasy : Comic Sans MS, Chicago, Charcoal, ImpactWestern, Humor Sans, xkcd, fantasy
#font.monospace : DejaVu Sans Mono, Bitstream Vera Sans Mono, Computer Modern Typewriter, Andale Mono, Nimbus Mono L, Courier New, Courier, Fixed, Terminal, monospace

matplotlib 默认使用的 font.family 是 sans-serif,即无衬线字体,可以看到在font.sans-serif中设置的全部为西文字体,这里的设置和css样式文件中设置差不多,只需要添加系统存在的字体名称即可(需要注意的是,matplotlib:

只支持ttf格式的字体),设置时需要将注释符号#去除。

解决方案二:重载配置文件

import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['font.serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题,或者转换负号为字符串

解决方案三:自定义字体

import numpy as np
import pylab as pl
import matplotlib.font_manager as fm

myfont = fm.FontProperties(fname=r'D:\Fonts\simkai.ttf') # 设置字体
t = np.arange(0.0,2.0 * np.pi,0.01) # 自变量取值范围
s = np.sin(t) # 计算正弦函数值
z = np.cos(t) # 计算余弦函数值
pl.plot(t,s,label='正弦')
pl.plot(t,z,label='余弦')
pl.xlabel('x-变量',fontproperties=myfont,fontsize=24) #设置标签
pl.ylabel('y-正弦余弦函数值',fontproperties=myfont,fontsize=24)
pl.title('sin-cos函数图像',fontproperties=myfont,fontsize=32) #图像标题
pl.legend(prop=myfont)
pl.show()

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python非递归全排列实现方法
Apr 10 Python
Python进度条实时显示处理进度的示例代码
Jan 30 Python
使用python编写监听端
Apr 12 Python
Python实现修改IE注册表功能示例
May 10 Python
Python中的异常处理try/except/finally/raise用法分析
Feb 28 Python
Python字符串对象实现原理详解
Jul 01 Python
python如何实现数据的线性拟合
Jul 19 Python
python Jupyter运行时间实例过程解析
Dec 13 Python
使用PyTorch将文件夹下的图片分为训练集和验证集实例
Jan 08 Python
利用Python将图片中扭曲矩形的复原
Sep 07 Python
Python3 用什么IDE开发工具比较好
Nov 28 Python
python实现无边框进度条的实例代码
Dec 30 Python
Python使用sorted对字典的key或value排序
Nov 15 #Python
python并发和异步编程实例
Nov 15 #Python
Numpy截取指定范围内的数据方法
Nov 14 #Python
python numpy元素的区间查找方法
Nov 14 #Python
python爬虫之urllib库常用方法用法总结大全
Nov 14 #Python
Python3爬取英雄联盟英雄皮肤大图实例代码
Nov 14 #Python
python 顺时针打印矩阵的超简洁代码
Nov 14 #Python
You might like
我用php+mysql写的留言本
2006/10/09 PHP
php MySQL与分页效率
2008/06/04 PHP
javascript实现的动态添加表单元素input,button等(appendChild)
2007/11/24 Javascript
javascript 极速 隐藏/显示万行表格列只需 60毫秒
2009/03/28 Javascript
div+css布局的图片连续滚动js实现代码
2010/05/04 Javascript
javascript setinterval 的正确语法如何书写
2014/06/17 Javascript
基于JavaScript如何制作遮罩层对话框
2016/01/26 Javascript
总结JavaScript的正则与其他语言的不同之处
2016/08/25 Javascript
JS组件系列之使用HTML标签的data属性初始化JS组件
2016/09/14 Javascript
JS实现鼠标滑过显示边框的菜单效果
2016/09/21 Javascript
Javascript动画效果(2)
2016/10/11 Javascript
Vue实现双向数据绑定
2017/05/03 Javascript
nodejs集成sqlite使用示例
2017/06/05 NodeJs
详细AngularJs4的图片剪裁组件的实例
2017/07/12 Javascript
jQuery实现可编辑表格并生成json结果(实例代码)
2017/07/19 jQuery
vue项目优化之通过keep-alive数据缓存的方法
2017/12/11 Javascript
vue中实现左右联动的效果
2018/06/22 Javascript
通过函数作用域和块级作用域看javascript的作用域链
2018/08/05 Javascript
[01:38]完美世界高校联赛决赛花絮
2018/12/02 DOTA
[01:06:43]完美世界DOTA2联赛PWL S3 PXG vs GXR 第二场 12.19
2020/12/24 DOTA
python正则匹配查询港澳通行证办理进度示例分享
2013/12/27 Python
python从list列表中选出一个数和其对应的坐标方法
2019/07/20 Python
pycharm创建scrapy项目教程及遇到的坑解析
2019/08/15 Python
Python之京东商品秒杀的实现示例
2021/01/06 Python
CSS3 calc()会计算属性详解
2018/02/27 HTML / CSS
施华洛世奇韩国官网:SWAROVSKI韩国
2018/06/05 全球购物
Gerry Weber德国官网:优质女性时装,德国最大的时装公司之一
2019/11/02 全球购物
贝佳斯官方网站:Borghese
2020/05/08 全球购物
SOA的常见陷阱或者误解是什么
2014/10/05 面试题
如何打造一封优秀的留学推荐信
2014/01/25 职场文书
三年级语文教学反思
2014/02/01 职场文书
儿童生日会策划方案
2014/05/15 职场文书
办公室文员工作自我鉴定
2014/09/19 职场文书
详细总结Python常见的安全问题
2021/05/21 Python
Win11如何设置右键单击显示所有选项?Win11右键单击显示所有选项设置教程
2022/04/08 数码科技
python区块链实现简版工作量证明
2022/05/25 Python