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的urllib模块显示下载进度示例
Jan 17 Python
浅谈Python中的闭包
Jul 08 Python
Python中利用Scipy包的SIFT方法进行图片识别的实例教程
Jun 03 Python
scrapy spider的几种爬取方式实例代码
Jan 25 Python
基于python指定包的安装路径方法
Oct 27 Python
Python使用pyshp库读取shapefile信息的方法
Dec 29 Python
解决Django layui {{}}冲突的问题
Aug 29 Python
numpy库reshape用法详解
Apr 19 Python
python_matplotlib改变横坐标和纵坐标上的刻度(ticks)方式
May 16 Python
Pytorch 使用 nii数据做输入数据的操作
May 26 Python
CocosCreator ScrollView优化系列之分帧加载
Apr 14 Python
Python+Matplotlib图像上指定坐标的位置添加文本标签与注释
Apr 11 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
setcookie中Cannot modify header information-headers already sent by错误的解决方法详解
2013/05/08 PHP
使用PHP Socket写的POP3类
2013/10/30 PHP
简单说说PHP优化那些事(经验分享)
2014/11/27 PHP
php随机取mysql记录方法小结
2014/12/27 PHP
利用Homestead快速运行一个Laravel项目的方法详解
2017/11/14 PHP
laravel执行php artisan migrate报错的解决方法
2019/10/09 PHP
JQuery中$之选择器用法介绍
2011/04/05 Javascript
Javascript 页面模板化很多人没有使用过的方法
2012/06/05 Javascript
基于jQuery实现下拉收缩(展开与折叠)特效
2012/12/25 Javascript
基于jQuery实现搜索关键字自动匹配功能
2020/03/26 Javascript
Vue.js 表单校验插件
2016/08/14 Javascript
jQuery ui autocomplete选择列表被Bootstrap模态窗遮挡的完美解决方法
2016/09/23 Javascript
Vuejs入门教程之Vue生命周期,数据,手动挂载,指令,过滤器
2017/04/19 Javascript
JS失效 提示HTML1114: (UNICODE 字节顺序标记)的代码页 utf-8 覆盖(META 标记)的冲突的代码页 utf-8
2017/06/23 Javascript
解决vue项目报错webpackJsonp is not defined问题
2018/03/14 Javascript
javascript实现文件拖拽事件
2018/03/29 Javascript
layer.close()关闭进度条和Iframe窗的方法
2018/08/17 Javascript
Node.js 实现远程桌面监控的方法步骤
2019/07/02 Javascript
JS扁平化输出数组的2种方法解析
2019/09/17 Javascript
小程序自定义导航栏兼容适配所有机型(附完整案例)
2020/04/26 Javascript
微信小程序报错: thirdScriptError的错误问题
2020/06/19 Javascript
JavaScript代码简化技巧实例解析
2020/09/09 Javascript
如何基于viewport vm适配移动端页面
2020/11/13 Javascript
Python导出DBF文件到Excel的方法
2015/07/25 Python
Python实现输出某区间范围内全部素数的方法
2018/05/02 Python
Python接口开发实现步骤详解
2020/04/26 Python
Python3基于print打印带颜色字符串
2020/07/06 Python
Python Selenium自动化获取页面信息的方法
2020/08/31 Python
详解基于python的全局与局部序列比对的实现(DNA)
2020/10/07 Python
在python中对于bool布尔值的取反操作
2020/12/11 Python
教育专业个人求职信
2013/12/02 职场文书
《小猪家的桃花树》教学反思
2014/04/11 职场文书
公证委托书
2014/08/01 职场文书
详解MySQL多版本并发控制机制(MVCC)源码
2021/06/23 MySQL
vue+element ui实现锚点定位
2021/06/29 Vue.js
mysql拆分字符串作为查询条件的示例代码
2022/07/07 MySQL