matplotlib 中文问题
matplotlib的缺省配置文件中所使用的字体无法正确显示中文。为了让图表能正确显示中文,主要有三种设置中文的方法:
(1)直接读取指定的字体文件。这种方法的依赖性最小,缺点是要指定字体文件的路径。举个例子,在源码所在目录下有STZHONGS.TTF字体文件,那么可以像下面这样写:
# -*- coding: utf-8 -*- from numpy import *
import matplotlib.pyplot as plt
from matplotlib import font_manager # 如果要保存为pdf格式,需要增加如下配置
#from matplotlib import rcParams
#rcParams["pdf.fonttype"] = 42 chf = font_manager.FontProperties(fname='STZHONGS.TTF') plt.plot(arange(0, 10, 1), arange(0, 10, 1))
plt.title(u'中文测试图样', fontproperties=chf)
plt.legend((u'图例',), 'lower right', prop=chf)
plt.savefig('test.png', format='png') # 或者pdf(2)在脚本里设置使用系统字体。这种方法要依赖于系统的字体文件。比如:
# -*- coding: utf-8 -*- from numpy import *
import matplotlib.pyplot as plt
from matplotlib import rcParams rcParams['font.family'] = 'STZhongSong' # 如果要保存为pdf格式,需要增加如下配置
#rcParams["pdf.fonttype"] = 42 plt.plot(arange(0, 10, 1), arange(0, 10, 1))
plt.title(u'中文测试图样')
plt.legend((u'图例',), 'lower right')
plt.savefig('test.png', format='png') # 或者pdf(3)第三种方法是修改Matplotlib的默认配置,相当于把脚本里的设置移到了配置文件中。设置mpl-data\matplotlibrc文件,下面是默认的配置:
#font.family : sans-serif
#font.serif : Bitstream Vera Serif, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif
#font.sans-serif : Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif如何获得自带的字体?
在matplotlib中可以通过字体名指定字体,而每个字体名都与一个字体文件相对应。通过下面的程序可以获得所有可用的字体列表:
>>> from matplotlib.font_manager import fontManager
>>> fontManager.ttflist
[<Font 'cmex10' (cmex10.ttf) normal normal 400 normal>,
<Font 'Bitstream Vera Sans Mono' (VeraMoBd.ttf) normal normal 700 normal>,
...
]fontManager.ttflist是matplotlib的系统字体索引列表。其中的每个元素都是表示字体的Font对象。例如由第一个Font对象可知,字体名”cmex10”与字体文件“cmex10.ttf”相对应。下面的语句获得字体文件的全路径和字体名:
>>> fontManager.ttflist[0].name
'cmex10'
>>> fontManager.ttflist[0].fname
'C:\\Python26\\lib\\site-packages\\matplotlib\\mpl-data\\fonts\\ttf\\cmex10.ttf'由字体文件的路径可知’cmex10’是matplotlib自带的字体。
from matplotlib.font_manager import fontManager
import matplotlib.pyplot as plt
import os
import os.path fig = plt.figure(figsize=(12,6))
ax = fig.add_subplot(111)
plt.subplots_adjust(0, 0, 1, 1, 0, 0)
plt.xticks([])
plt.yticks([])
x, y = 0.05, 0.08
fonts = [font.name for font in fontManager.ttflist if
os.path.exists(font.fname) and os.stat(font.fname).st_size>1e6] ❶
font = set(fonts)
dy = (1.0-y)/(len(fonts)/4 + (len(fonts)%4!=0))
for font in fonts:
t = ax.text(x, y, u"中文字体", {'fontname':font, 'fontsize':14}, transform=ax.transAxes) ❷
ax.text(x, y-dy/2, font, transform=ax.transAxes)
x += 0.25
if x >= 1.0:
y += dy
x = 0.05
plt.show()
matplotlib 中文问题的更多相关文章
- python matplotlib 中文显示参数设置
python matplotlib 中文显示参数设置 方法一:每次编写代码时进行参数设置 #coding:utf-8import matplotlib.pyplot as pltplt.rcParam ...
- Matplotlib中文显示的问题
原文地址:http://blog.csdn.net/rumswell/article/details/6544377 #Matplotlib中文显示有问题,当然可以修改配置文件matplotlibrc ...
- ubuntu系统下matplotlib中文乱码问题
参考 [ubuntu系统下matplotlib中文乱码问题 - CSDN博客](https://blog.csdn.net/jeff_liu_sky_/article/details/54023745 ...
- 第26月第7天 mac如何matplotlib中文乱码问题
1.mac如何matplotlib中文乱码问题 先查看 ~/.matplotlib/fontList.json 添加SimHei字体(simhei.ttf文件)到 /Library/Framework ...
- Linux 系统下 matplotlib 中文乱码解决办法
亲测有效的方法之一: 1.下载中文字体simhei.ttf SimHei可以到http://fontzone.net/download/simhei下载 2.找到matplotlib相关的font文件 ...
- python matplotlib 中文显示乱码设置
python matplotlib 中文显示乱码设置 原因:是matplotlib库中没有中文字体.1 解决方案:1.进入C:\Anaconda64\Lib\site-packages\matplot ...
- 彻底解决matplotlib中文乱码问题(转)
彻底解决matplotlib中文乱码问题 1.环境查看a.系统版本查看[hadoop@p168 ~]$ cat /etc/redhat-releaseCentOS Linux release 7.2. ...
- Matplotlib中文乱码解决办法
Matplotlib中文乱码 解决方法如下: 首先设置源码文件编码方式为UTF-8 #-*- coding: utf-8 -*- 接着设置字体属性字典 font = {'family': 'SimHe ...
- Matplotlib中文设置
1.中文设置方法,代码前加入语句 from pylab import mpl mpl.rcParams['font.sans-serif'] = ['SimHei'] 2.例子 # -*- codin ...
- 解决matplotlib中文乱码问题(Windows)
1.修改matplotlibrc文件 进入Python安装目录下的Lib\site-packages\matplotlib\mpl-data目录,打开matplotlibrc文件,删除font.fam ...
随机推荐
- Ms sql server sql优化技巧
SET STATISTICS PROFILE ON SET STATISTICS IO ON SET STATISTICS TIME ON SELECT * FROM userinfo WHERE N ...
- C#保留小数位数
1.System.Globalization.NumberFormatInfo provider = new System.Globalization.NumberFormatInfo(); prov ...
- 关于解压覆盖IIS文件后,新的文件不具备权限导致DMS系统无法正常运行
向DMS的服务器端站点bin目录覆盖任何补丁文件,请注意:Web站点的bin目录中的文件,IIS的服务进程(Windows2003以上,都是对应Network Services账户)必须对这些文件具 ...
- 百度面试题——top K算法
需求 从一亿个数据中,找出其中最小的10个数. 分析 最笨的方法就是将这一亿个数据,按从小到大进行排序,然后取前10个.这样的话,即使使用时间复杂度为nlogn的快排或堆排,由于元素会频繁的移动,效率 ...
- js小技巧(二)
//移动的图层,拖动 1.<span style='position:absolute;width:200;height:200;background:red' onmousedown=Mous ...
- 继电器Relay:ZZR08
继电器常识: 继电器有三个接线柱:常开(NO),常闭(NC),接地(C) 如果连接的时间长,偶尔需要断电, 那么接NC 和 C, 这样继电器set on 时为断电.除此之外,继电器还可以控制按键,以及 ...
- Android笔记——四大组件详解与总结
android四大组件分别为activity.service.content provider.broadcast receiver. ------------------------------- ...
- Recover Binary Search Tree-恢复二叉查找树
题目描述: 由于某种原因一个二叉排序树的两个节点的元素被交换,在不改变树的结构的情况下恢复这颗二叉排序树 题目来源: http://oj.leetcode.com/problems/recover-b ...
- Android videoview循环播放视频
如何在一个activity里实现videoview对一个文件夹下的所有视频文件顺序循环播放,当切换界面时暂停, 切换回来继续原来的视频播放呢.所谓的 自动循环播放就是监听到视频播放结束之后继续重新播放 ...
- MatOfPoint作为minAreaRect的参数总是报错"throw new IllegalArgumentException("Incomatible Mat");
MatOfPoint matPt = contours.get(i) minRect.set(i, Imgproc.fitEllipse( new MatOfPoint2f(matPt) ...