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操作xml文件详细介绍
Jun 09 Python
python求pi的方法
Oct 08 Python
python命令行参数解析OptionParser类用法实例
Oct 09 Python
详解Python中的正则表达式的用法
Apr 09 Python
通过数据库对Django进行删除字段和删除模型的操作
Jul 21 Python
pygame实现弹力球及其变速效果
Jul 03 Python
手把手教你如何安装Pycharm(详细图文教程)
Nov 28 Python
浅谈python下含中文字符串正则表达式的编码问题
Dec 07 Python
PyCharm导入python项目并配置虚拟环境的教程详解
Oct 13 Python
Python实现中值滤波去噪方式
Dec 18 Python
Python面向对象编程基础实例分析
Jan 17 Python
Python基础之Socket通信原理
Apr 22 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学习之PHP变量
2006/10/09 PHP
PHP 日期时间函数的高级应用技巧
2009/10/10 PHP
使用PHP强制下载PDF文件示例
2014/01/17 PHP
利用php做服务器和web前端的界面进行交互
2016/10/31 PHP
DEDE实现转跳属性文档在模板上调用出转跳地址
2016/11/04 PHP
PHP创建对象的六种方式实例总结
2019/06/27 PHP
如何运行/调试你的PHP代码
2020/10/23 PHP
TFDN图片播放器 不错自动播放
2006/10/03 Javascript
js 绑定带参数的事件以及手动触发事件
2010/04/27 Javascript
转义字符(\)对JavaScript中JSON.parse的影响概述
2013/07/17 Javascript
Jquery利用mouseenter和mouseleave实现鼠标经过弹出层且可以点击
2014/02/12 Javascript
JavaScript闭包实例讲解
2014/04/22 Javascript
关于JS数组追加数组采用push.apply的问题
2014/06/09 Javascript
jQuery获取页面元素绝对与相对位置的方法
2015/06/10 Javascript
使用jQuery UI库开发Web界面的简单入门指引
2016/04/22 Javascript
KnockoutJS 3.X API 第四章之表单value绑定
2016/10/10 Javascript
jQuery插件FusionCharts实现的MSBar2D图效果示例【附demo源码】
2017/03/24 jQuery
express默认日志组件morgan的方法
2018/04/05 Javascript
在vue-cli的组件模板里使用font-awesome的两种方法
2018/09/28 Javascript
小程序实现左右来回滚动字幕效果
2018/12/28 Javascript
react基本安装与测试示例
2020/04/27 Javascript
jQuery实现移动端扭蛋机抽奖
2020/11/08 jQuery
Python将xml和xsl转换为html的方法
2015/03/10 Python
python通过装饰器检查函数参数数据类型的方法
2015/03/13 Python
如何优雅地处理Django中的favicon.ico图标详解
2018/07/05 Python
Django集成CAS单点登录的方法示例
2019/06/10 Python
django之自定义软删除Model的方法
2019/08/14 Python
python for循环remove同一个list过程解析
2019/08/14 Python
Python 支持向量机分类器的实现
2020/01/15 Python
vscode调试django项目的方法
2020/08/06 Python
创伤外科专业推荐信范文
2013/11/19 职场文书
经典优秀毕业生求职信范文分享
2013/12/18 职场文书
2014年计算机专业个人自我评价
2014/01/19 职场文书
《鸿门宴》教学反思
2014/04/22 职场文书
小学教师个人工作总结2015
2015/04/20 职场文书
VUE中的v-if与v-show区别介绍
2022/03/13 Vue.js