最近想学习一些python数据分析的内容,就弄了个爬虫爬取了一些数据,并打算用Anaconda一套的工具(pandas, numpy, scipy, matplotlib, jupyter)等进行一些初步的数据挖掘和分析。
在使用matplotlib画图时,横坐标为中文,但是画出的条形图横坐标总是显示“框框”,就去查资料解决。感觉这应该是个比较常见的问题,网上的中文资料也确实很多,但是没有任何一个彻底解决了我遇到的问题。零零碎碎用了快3个小时的时间,才终于搞定。特此分享,希望能帮到有同样问题的童鞋。
运行环境:
python2.7
Linux Centos7
用conda安装的matplotlib和pandas
问题:
matplotlib画图,无法显示中文
问题原因:
linux操作系统以及matplotlib的字体库中,没有可用的中文字体
matplotlib包默认只支持ASCII码,不支持unicode码
网上资料总结:
修改matplotlib的资源配置文件,例如增加"Simhei"字体(这个字体并不是所有的linux系统都有的好嘛!修改了并没有作用)
给linux安装中文字体,并修改matplotlib的资源配置文件。(呵呵,并没有作用)
解决方案:
其实也是综合了网上的各种解决方案。总体说来有以下几个步骤:
1. 获取matplotlibrc文件所在路径。在jupyter notebook中获取:
import matplotlib matplotlib.matplotlib_fname()
例如,我的这个文件在:
u'~/miniconda2/lib/python2.7/site-packages/matplotlib/mpl-data/matplotlibrc'
后续步骤会修改此文件中的font参数。
2. 看看系统中的所有字体,以及可用的中文字体。也是在jupyter nb中:
from matplotlib.font_manager import FontManager import subprocess fm = FontManager() mat_fonts = set(f.name for f in fm.ttflist) print mat_fonts output = subprocess.check_output( 'fc-list :lang=zh -f "%{family}\n"', shell=True) print '*' * 10, '系统可用的中文字体', '*' * 10 print output zh_fonts = set(f.split(',', 1)[0] for f in output.split('\n')) available = mat_fonts & zh_fonts print '*' * 10, '可用的字体', '*' * 10 for f in available: print f
做完上述操作,会发现“可用的字体”这里为空。因为没有中文字体给matplotlib用(所以才会中文都显示“框框”)
3. 假设操作系统中没有中文字体。此时下载一个ttf中文字体,并在cenos中安装。要安装那种系统能检测font-family的,否则无效。
解压rar文件。在 /usr/share/fonts 路径下创建存放此字体的文件夹yourfontdir,并下载的ttf文件复制到yourfontdir中(可以给文件改个英文名,方便操作)
4. 给cenos安装这个字体。
cd /usr/share/fonts/yourfontsdir #生成字体索引信息. 会显示字体的font-family sudo mkfontscale sudo mkfontdir #更新字体缓存: fc-cache
5. 修改matplotlibrc文件
修改步骤1中获取的matplotlibrc文件配置。
将font.family 部分注释去掉,并且在font.serif 支持字体加上一个中文字体。这里就加上刚才下载的中文字体的font-family. 可以通过 fc-list 命令查找一下(所以前面最好记下来)。我这里增加的是"WenQuanYi Zen Hei Mono"字体。
下面这句注释要去掉,不然中文减号也显示方块:
axes.unicode_minus : False
6. 这一步骤最重要!为matplotlib增加中文字体
完成步骤5后,再操作步骤2,会发现“可用的中文字体”已经有了刚才安装的字体,但是画图仍然不能显示中文。这是因为你这个字体给centos安装了、也告诉matplotlib要用这个字体了,但是,matplotlib找不到这个字体的ttf文件啊。。。。所以需要给它弄一个。
将下载的ttf字体复制一份到以下路径:
~/miniconda2/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf
并删除相关cache。在以下路径:
~/.cache/matplotlib
删除其中与字体有关的cache
7. 现在重新画个图试试。搞定。
以上这篇基于Linux系统中python matplotlib画图的中文显示问题的解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]