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字符串处理实现单词反转
Jun 14 Python
Python中的浮点数原理与运算分析
Oct 12 Python
Python键盘输入转换为列表的实例
Jun 23 Python
pyqt5 使用label控件实时显示时间的实例
Jun 14 Python
django的聚合函数和aggregate、annotate方法使用详解
Jul 23 Python
Python学习笔记之Django创建第一个数据库模型的方法
Aug 07 Python
python 采用paramiko 远程执行命令及报错解决
Oct 21 Python
Python+OpenCV实现实时眼动追踪的示例代码
Nov 11 Python
python使用正则来处理各种匹配问题
Dec 22 Python
Python Django form 组件动态从数据库取choices数据实例
May 19 Python
python实现学生信息管理系统源码
Feb 22 Python
在Windows下安装配置CPU版的PyTorch的方法
Apr 02 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 flock 文件锁详细介绍
2012/12/29 PHP
ThinkPHP 3.2 版本升级了哪些内容
2015/03/05 PHP
[原创]解决wincache不支持64位PHP5.5/5.6的问题(提供64位wincache下载)
2016/06/22 PHP
php图片添加水印例子
2016/07/20 PHP
详解PHP中的序列化、反序列化操作
2017/03/21 PHP
PHP 应用容器化以及部署方法
2018/02/12 PHP
JS中字符问题(二进制/十进制/十六进制及ASCII码之间的转换)
2008/11/03 Javascript
一个很简单的jquery+xml+ajax的无刷新树结构(无css,后台是c#)
2010/06/02 Javascript
强大的jquery插件jqeuryUI做网页对话框效果!简单
2011/04/14 Javascript
Firefox中通过JavaScript复制数据到剪贴板(Copy to Clipboard 跨浏览器版)
2013/11/22 Javascript
JavaScript中reduce()方法的使用详解
2015/06/09 Javascript
Node.js中process模块常用的属性和方法
2016/12/13 Javascript
利用Angular+Angular-Ui实现分页(代码加简单)
2017/03/10 Javascript
jquery实现图片跟随鼠标的实例
2017/10/17 jQuery
vue.js语法及常用指令
2017/10/29 Javascript
Node.js进阶之核心模块https入门
2018/05/23 Javascript
详解如何在vscode里面调试js和node.js的方法步骤
2018/12/24 Javascript
NVM安装nodejs的方法实用步骤
2019/01/16 NodeJs
js实现随机抽奖
2020/03/19 Javascript
原生JavaScript实现轮播图
2021/01/10 Javascript
Python实现矩阵加法和乘法的方法分析
2017/12/19 Python
python Pandas 读取txt表格的实例
2018/04/29 Python
使用Python写一个量化股票提醒系统
2018/08/22 Python
python3中类的继承以及self和super的区别详解
2019/06/26 Python
详解Python3定时器任务代码
2019/09/23 Python
python使用信号量动态更新配置文件的操作
2020/04/01 Python
在 Python 中使用 MQTT的方法
2020/08/18 Python
行政部岗位职责范本
2014/03/13 职场文书
技术岗位竞聘演讲稿
2014/05/16 职场文书
甘南现象心得体会
2014/09/11 职场文书
2014年房产经纪人工作总结
2014/12/08 职场文书
保密法制宣传月活动总结
2015/05/07 职场文书
教师工作证明范本
2015/06/12 职场文书
乡镇团代会开幕词
2016/03/04 职场文书
golang中的空接口使用详解
2021/03/30 Python
详解Vue项目的打包方式(生成dist文件)
2022/01/18 Vue.js