美文网首页
MPL-附录01:matplotlib的汉字解决

MPL-附录01:matplotlib的汉字解决

作者: 杨强AT南京 | 来源:发表于2018-11-23 18:11 被阅读23次

matplotlib的汉字有的时候容易出现乱码,一般有两种办法解决:
  1. 通过代码大量设置字体属性来解决;
  2. 修改matplotlib环境配置来解决;

这里mark一下,便于今后查阅使用


一. 在代码中设置字体属性来解决

  代码中字体属性有两种方式:
    |-第一种方式直观,但解决不了所有问题;
    |-第二种方式需要对matplotlib结构非常熟悉才能运用自如;
  下面是两种解决办法的代码展示:

#coding=utf-8
import pandas  as pd
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
headers=['工作年限','学历','职位','职位ID','薪水','城市','发布时间']
#--加载字体库------------------------
zn_font=fm.FontProperties(fname="msyh.ttf")
#----------------------------------
pd_reader=pd.read_csv("jobs.csv",encoding="utf-8")
pd_reader=pd_reader.dropna()
plt.figure(1,figsize=(15,8),dpi=80)
#--使用字体属性----------------------
plt.xlabel('职位数',fontproperties=zn_font)
plt.ylabel('城市',fontproperties=zn_font)
#----------------------------------
#数据统计
pf=pd_reader.groupby(by=["城市"],as_index=True).count()
plt.plot(pf['薪水'],color='r',label='城市薪水统计')
#汉化
ax=plt.gca()
#--遍历所有组件设置字体属性------------
for item in ax.xaxis.get_ticklabels():
    item.set_fontproperties(zn_font)
#----------------------------------
plt.show()

二. 修改matplotlib环境配置来解决

1. 获取配置目录

  通过得到配置文件目录,与matplotlib系统的数据存放目录

print(mpl.get_configdir())
print(mpl.matplotlib_fname())

  第一个是用户级别配置文件,第二个是系统级别字体配置文件

  上面第二个语句输出:
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/matplotlib/mpl-data/matplotlibrc
  其中
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/matplotlib/mpl-data/就是数据存放目录
假如:记matplotlib安装目录为:${MLP_HOME},数据存放目录就是:${MLP_HOME}/mpl-data/

2.准备一个字体库文件

  在任何一个操作系统可以搜出一把的字体库,这里使用的是我的最爱:msyh.ttf字体库。

3.拷贝字体库到系统数据存放目录

  把字体库拷贝到数据存放目录下的fonts/ttf目录,完整的目录是:

${MLP_HOME}/mpl-data/fonts/ttf

4.确认字库的字体名

  从字体库文件是看不出字体名,获取字体名,可以根据经验,或者网络百度得到字体名。
  下面使用代码获取:

fp=fm.FontProperties(fname="msyh.ttf")
print(fp.get_family(),fp.get_name())

  # 输出的字体名:Microsoft YaHei

1. fp.get_name()函数的输出是字体明
2. get_family()输出的配置的缺省family-name

5.修改配置文件

  1. 首先,打开配置文件${MLP_HOME}/mpl-data/matplotlibrc,
  2. 然后,在文件中找到字体配置的位置:我的配置文件在195行,我增加一行196,配置family如下:

# 195 #font.family         : sans-serif
# 196 font.family         : Microsoft YaHei

  我使用vi打开,截图如下:

使用vi编辑配置文件

6. 测试

  可以在程序中测试,某些环境可能因为缓冲滞后,只需要重启环境即可。
  比如:ipython就会因为缓冲而暂时没有效果,重启下即可。


相关文章

网友评论

      本文标题:MPL-附录01:matplotlib的汉字解决

      本文链接:https://www.haomeiwen.com/subject/dlfsqqtx.html