编码训练:Python title()中文标题支持

晚上调试《Programming Computer Vision with Python》中的代码时,对于图显示的标题,一直都是用英文标识的。Matplotlib这货默认不支持中文,上星期在title()中用中文标识时,蹦出一黑黑的屏和一堆错误,当时本小子正忙着折腾别的,由于标题部分不长,不影响美观,就直接用英文把问题给绕开了。

绕过去的弯,总是要换还的。晚上看着图上英文标识的一长串英文,几乎每个英文标题都快超出了subplot的宽度。对于一个排版重度患者,看着真心捉急。于是,放狗一搜,竟然很快就找到答案了,也不知道上次肿么了,搜半天找到的全是要修改matplotlibrc配置文件。对于一个要分享给别人测试实验的代码,要别人在他的PC上修改配置文件,总不是一件明智的选择,况且这本书里的一些配置已经很麻烦了。

根据搜到的答案,完全可以不用修改配置文件,而直接在python脚本的开头加上下面的代码:

from matplotlib.font_manager import FontProperties
font = FontProperties(fname=r"c:\windows\fonts\SimSun.ttc", size=14)

上面从matplotlib.font_manager字体管理模块代入FontProperties,然后设置字体属性,FontProperties()设置的是Windows系统自带的宋体。关于Windows字体列表,可以查阅WIKI Windows字体列表size设置的是字体的大小。对于上面Matplotlib绘图中文显示,举个今晚调试好了的例子,本例也可以参见《Python计算机视觉编程》的第一章图像处理基础:

# -*- coding: utf-8 -*-
from PIL import Image
from pylab import *

# 添加中文字体支持
from matplotlib.font_manager import FontProperties
font = FontProperties(fname=r"c:\windows\fonts\SimSun.ttc", size=14)
figure()

pil_im = Image.open('../data/empire.jpg')
gray()
subplot(121)
title(u'原图',fontproperties=font)
axis('off')
imshow(pil_im)

pil_im = Image.open('../data/empire.jpg').convert('L')
subplot(122)
title(u'灰度图',fontproperties=font)
axis('off')
imshow(pil_im)

show()

上面代码title()中,字体属性fontproperties=font,即开头已经设置好了的字体属性,需要注意的是中文标识前有个字母u,这个不能少,否则会出错。秀一下上面代码运行的结果:

2014-03-18-ch01_P002-003_PIL

时间不早了,睡觉。

Reference:

[1]. python中matplotlib绘图中文显示问题