matplotlib解决中文乱码
调试以前写的matplotlib相关脚本,中文呈方块样;重新解决一遍,感觉比以前的理解更进一步,故而记下一笔;
1. 首先要为matplotlib添加中文字体库;
系统字体库在/usr/share/fonts/,可以看一下配置文件/etc/fonts/fonts.conf
matplotlib字体库需要看python安装位置了,打开python,输入:
import matplotlib
matplotlib.matplotlib_fname()
得到了matplotlib的配置文件位置,应该是<python-site-packages>/matplotlib/mpl-data/matplotlibrc
matplotlib字体库的位置就是<python-site-packages>/matplotlib/mpl-data/fonts/ttf
然后从系统库中找个合适的字体放到matplotlib字体库中,可以软链过来,不过要注意,只接受ttf文件,不接受ttc文件,所以拷过来或链过来的时候,需要把文件后缀名改成.ttf;
我用的是文泉驿正黑(其它的解决方案中有用微软雅黑的,当然前提是你自己从windows搞了雅黑字库进linux,不在本文讨论范围,这里用了linux发行版通常会配备的文泉驿字体);于是:
ln -s /usr/share/fonts/wqy-zenhei/wqy-zenhei.ttc <python-site-packages>/matplotlib/mpl-data/fonts/ttf/wqy-zenhei.ttf
不论如何,这里建议用黑体字,因为黑体是无衬线字(sans-serif),下面会讲;
如何确认字体文件放进来之后生效了呢?
删除~/.cache/matplotlib/fontList.json,重启python,from matplotlib.font_managerimport FontManager,应该会重新生成~/.cache/matplotlib/fontList.json,打开该文件,查看是否加载了新加的文体库;
(补充:python2.7环境下,cache文件是~/.cache/matplotlib/fontList.cache)
更有效的方法是用以下python代码检查matplotlib识别到的字体:
from matplotlib.font_manager import FontManager fm = FontManager()
for f in fm.ttflist:
print (f.name)
2. 然后需要配置matplotlib启用中文字体
打开刚才的matplotlib配置文件<python-site-packages>/matplotlib/mpl-data/matplotlibrc
找到这一行:#font.family : sans-serif
这一行可以不需要反注释掉,因为默认就是用sans-serif;
然后找到#font.sans-serif,把这一行反注释掉,然后把“WenQuanYi Zen Hei”加到第一个位置上;
上面说过建议用黑体,因为黑体是sans-serif字体,如果换个宋体加在这里是不合理的(虽然可能可行,但不合理,未试);
如果用宋体的话,建议把font.family换成serif,然后把宋体字加到font.serif里;
参考:
https://segmentfault.com/a/1190000005144275
https://www.zhihu.com/question/25404709
matplotlib解决中文乱码的更多相关文章
- 增加UBUNTU字符集 解决中文乱码问题
对GBK,GB2312,GB18030字符集的支持是UBUNTU中文乱码的罪魁祸首,其实我们可以在保持UTF-8为默认编码的条件下添加对这几个编码的支持,以解决中文乱码问题. 我想这个问题肯定有其他人 ...
- Sublime Text 2—解决中文乱码
Sublime Text 2是一个非常棒的代码及文本编辑器,绿色小巧.速度飞快,跨平台支持Win/Mac/Linux,支持32与64位,支持各种流行编程语言的语法高亮.代码补全等,有着许多其他编辑器没 ...
- zabbix解决中文乱码问题(没有测试成功)
zabbix解决中文乱码问题 1.在windows系统中找一个自己喜欢的字体,这里我们用:msyh.ttf 2.将字体上传至/var/www/html/zabbix/fonts目录下 [root@za ...
- 【原创】通俗易懂地解决中文乱码问题(2) --- 分析解决Mysql插入移动端表情符报错 ‘incorrect string value: '\xF0...
这篇blog重点在解决问题,如果你对字符编码并不是特别了解,建议先看看 < [原创]通俗易懂地解决中文乱码问题(1) --- 跨平台乱码 >. 当然,如果只是针对解决这个Mysql插入报错 ...
- Debian 6解决中文乱码
DEBIAN下中文显示 一.首先检查LOCALE情况 说明:DEBIAN因为基于GNU所以,对不同地域进行了不同的包支持,以LOCALE形式存在. 1.挂载ISO文件包,前8个ISO包就可以(这里不在 ...
- 04_过滤器Filter_02_Filter解决中文乱码问题
[过滤器解决中文乱码问题实例] [工程截图] [web.xml] <?xml version="1.0" encoding="UTF-8"?> &l ...
- Web---演示servlet技术(servlet生命周期),解决中文乱码问题
本节讲解决中文乱码问题的4种方法. 还有更好的方法,也就是用过滤器,这里就不演示了,博主目前也不会~呼♪(^∇^*)~过段时间才会学. servlet生命周期演示: index.jsp: <%@ ...
- 通俗易懂地解决中文乱码问题(2) --- 分析解决Mysql插入移动端表情符报错 ‘incorrect string value: '\xF0...
原文:[原创]通俗易懂地解决中文乱码问题(2) --- 分析解决Mysql插入移动端表情符报错 'incorrect string value: '\xF0... 这篇blog重点在解决问题,如果你对 ...
- 解决中文乱码( jsp表单提交中文时出现乱码)
有三种方法: 1.建立一个filter中文解决乱码 2.Struts2在struts.xml中修改默认的编码设定 3.用Spring解决中文乱码 4.直接在jsp中修改解决 1.建立一个filter解 ...
随机推荐
- sqlplus 分析执行计划
转载 http://xm-koma.iteye.com/blog/1048451 对于oracle9i,需要手工设置plustrace角色,步骤如下: 1.在SQL>connect sys/密码 ...
- java设计模式--简单工厂
java设计模式--简单工厂 简单工厂不是一个标准的设计模式,但是很常用需要掌握. 在java应用开发中,要"面向接口编程". 1.java中接口的概念: 在java中接口是一种特 ...
- zookeeper 分布式管理
分布式框架: Zookeeper与paxos算法 一. zookeeper是什么 官方说辞:Zookeeper 分布式服务框架是Apache Hadoop 的一个子项目,它主要是 ...
- MySQL/MariaDB的锁
本文目录: 1.MariaDB/MySQL事务提交的方式 2.MariaDB/MySQL中的锁简介 2.1 不同存储引擎支持的锁级别 2.2 锁类型 2.3 锁兼容性 3.MyISAM的表级锁(loc ...
- 《你必须掌握的Entity Framework 6.x与Core 2.0》书籍出版
前言 到目前为止写过刚好两百来篇博客,看过我博客的读者应该大概知道我每一篇博客都沿袭着一贯的套路,从前言到话题最终到总结,本文依然是一如既往的套路,但是不是介绍技术,也可说是介绍技术,不过是介绍书中的 ...
- 解决Android SDK Manager更新失败问题
from:http://www.ztyhome.com/android-sdk-update/ 问题描述: 使用SDK Manager更新时无法完成更新ADT时无法解析https://dl-ssl.g ...
- Mac Launchpad出现两个相同快捷方式的解决办法
进入以下目录 ~/Library/Application Support/Dock 把里面的.db文件删掉,然后注销重新登录即可.
- Android Gradle使用总结
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/77678577 本文出自[赵彦军的博客] 其他 Groovy 使用完全解析 http ...
- 单片机开发——02工欲善其事必先利其器(Proteus软件安装破解)
在单片机开发工程中,博主经常通过模拟软件Proteus进行模拟仿真,将编译生成的"HEX"文件下载在单片机芯片中,然后进行后期的debug工作,当模拟仿真完成之后,进行硬件测试部分 ...
- 智能指针之 shared_ptr
std::shared_ptr 是通过指针保持对象共享所有权的智能指针.多个 shared_ptr 对象可占有同一对象大概实现了一下,主要实现原理为,共享指针内部持有堆资源 的指针以及引用计数的指针 ...