加载中…
个人资料
From_R_to_SAS_and_python
From_R_to_
SAS_and_python
  • 博客等级:
  • 博客积分:0
  • 博客访问:20,672
  • 关注人气:7
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
正文 字体大小:

python画图包seaborn和matplotlib中文字体显示(针对windows系统,,使用ipython notebook)

(2015-12-05 16:52:44)
标签:

python

matplotlib

seaborn

中文字体

一、seaborn的中文字体显示(针对windows系统,,使用ipython notebook)

####################
更新:2017年6月16日

这次的seaborn版本是0.7.1,中文显示有时不能正确显示。

经测试发现,必须先导入seaborn包,然后再设置字体为微软雅黑,按照下面的代码运行后,即可成功显示中文字体。

但是如果之后设置了sns.set_context("talk")之类的,中文又变成了方块,设置sns.set_context("notebook"),中文就又正确显示,真的有些奇怪,要多试。

### the order of code is important!
### we should import seaborn package first, then configurate the font of sans-serif.

import pandas as pd
import seaborn as sns # first import this package

import sys
# print sys.getdefaultencoding()
# ipython notebook中默认是ascii编码 
stdout = sys.stdout
reload(sys)
sys.stdout = stdout
sys.setdefaultencoding('utf8')

import matplotlib as mpl
import matplotlib.pyplot as plt
mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei'] #指定默认字体  
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
# sns.axes_style()

%matplotlib inline

####################
  • 首先:解决seaborn画图有中文时的编码异常错误

import seaborn as sns

import sys
# print sys.getdefaultencoding()
ipython notebook中默认是ascii编码 
reload(sys)
sys.setdefaultencoding('utf8') 

  • 其次:修改matplotlibrc配置文件中的字体名称
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei'] #指定默认字体  
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
# sns.axes_style(),可以看到是否成功设定字体为微软雅黑。

  • 最后:修改seaborn中的一些设置(这里可以先不设置,或四个选项都试下)
sns.set_context("talk")
或者sns.set_context("poster")均可,该函数的其他的两个属性"notebook"和"paper"却不能正常显示中文。



二、matplotlib的中文字体显示(针对windows系统,,使用ipython notebook)

  • 方法一:临时方法
               优点:直接在代码中指定中文字体文件,在每个出现中文的地方指定 fontproperties为刚才设置的字体;
               缺点:每个出现中文的地方如title都要指定字体,并不是每个地方如legend都提供指定字体的参数。
               适用场合:偶尔使用中文显示,出现中文的地方较少。

myfont = matplotlib.font_manager.FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=14)

# 直接设置为中文时
ax.set_title(u'中文', fontproperties = myfont)

# 设置x轴标签所对应的刻度的位置
ax.xaxis.set_major_locator(matplotlib.ticker.FixedLocator(np.arange(1, len(temp_name.name) + 1)))
# 某一列数据中均为中文,用该列作为x轴刻度标签时
ax.set_xticklabels(labels = temp_name.name, fontproperties = myfont, rotation = 'vertical')

  • 方法二:永久方法
             优点:一劳永逸,以后再不用担忧中文问题了,和英文一样如鱼得水。
             缺点:比较复杂,虽然我试验成功,可是原理我也没弄明白。
             适用场合:经常使用中文显示,各种地方都有出现中文的可能,如坐标轴刻度标签,图标等等。

  • 首先:网络上的方法:修改matplotlibrc配置文件()。
             进入Python安装目录下的Lib\site-packages\matplotlib\mpl-data目录,打开matplotlibrc文件,删除font.family和font.sans-serif两行前的#(后来试验,这步可省略),并在font.sans-serif后添加微软雅黑字体(Microsoft YaHei),修改axes.unicode_minus为False,示例如下:
python画图包seaborn和matplotlib中文字体显示(针对windows系统,,使用ipython <wbr>notebook)
python画图包seaborn和matplotlib中文字体显示(针对windows系统,,使用ipython <wbr>notebook)
python画图包seaborn和matplotlib中文字体显示(针对windows系统,,使用ipython <wbr>notebook)
这个方法有时有效,有时失效,估计是ipython notebook开启后未必自动去读这个配置文件。

  • 其次:多次试验发现,当解决seaborn中的中文显示问题时,matplotlib的中文显示也解决了。
由于seaborn本身就建立在matplotlib的基础上,因此seaborn的一些设置可能也修改了matploblib的设置。

# 解决seaborn画图有中文时的编码异常错误
import sys
reload(sys)
#sys.setdefaultencoding('utf-8')
sys.setdefaultencoding('utf8')

# 修改matplotlibrc配置文件中的字体名称
mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei'] #指定默认字体  
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题 
sns.set_context("talk")
#sns.set_context("poster")

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有