python matplotlib画图产生的type 3 fonts字体不兼容
更改措施:
使用type 42字体来生成postscript 和pdf 文件。
1
2
3
|
import matplotlib matplotlib.rcparams[ 'pdf.fonttype' ] = 42 matplotlib.rcparams[ 'ps.fonttype' ] = 42 |
补充:type 3字体的解决办法
这个问题困扰了我一天了,成功解决,这种感觉太爽了。
提交mnras的pdf文件可能会因为含有type3字体而无法在线生成proof。
如遇此种情况,可先如下确认
1
|
pdffonts paper.pdf |
看输出是否含有type3字体
如果是,则先考虑官方的建议,在文件头部加入:
1
2
|
\usepackage[t1]{fontenc} \usepackage{aecompl} |
重新编译
问题依旧的话,应该是插图中含有type3字体。比如用python画图,默认的似乎就是输出成type3. 修改
1
|
~ / .matplotlib / matplotlibrc |
加入(或者修改)如下两行
1
2
|
ps.fonttype : 42 # output type 3 (type3) or type 42 (truetype) pdf.fonttype : 42 # output type 3 (type3) or type 42 (truetype) |
重新画图
另一种解决方式是,将问题图片(如果是eps格式)用eps2eps转换一遍。但转换之后的图片中的字体被像素化了,放大时不清晰,不推荐。
还有一个方法效果好一些:先转成pdf再转回eps, 比如对fig.eps,
1
2
|
epstopdf fig.eps fig.pdf pdftops - eps - r 400 fig.pdf fig.eps |
补充:python3 pil使用font字体错误:oserror: cannot open resource问题解决
错误日志
1
2
3
4
5
6
7
8
9
10
11
|
>>> from pil import imagefont >>> imagefont.truetype <function truetype at 0x0000021178b82b70 > >>> imagefont.truetype( "notosanscjk-regular.ttc" , 30 ) traceback (most recent call last): file "<stdin>" , line 1 , in <module> file "d:\users\52489\anaconda3\lib\site-packages\pil\imagefont.py" , line 261 , in truetype return freetypefont(font, size, index, encoding, layout_engine) file "d:\users\52489\anaconda3\lib\site-packages\pil\imagefont.py" , line 144 , in __init__ self .font = core.getfont(font, size, index, encoding, layout_engine = layout_engine) oserror: cannot open resource |
解决方法
缺少对应字体文件: notosanscjk-regular.ttc
在网上找到对应的font文件
以我的ubuntu 16为例, 字体文件在"/usr/share/fonts/truetype"中,
因此,把下载到的ttc文件放到 /usr/share/fonts/truetype 文件夹当中.
重新启动python环境,即可正常导入.
以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。如有错误或未考虑完全的地方,望不吝赐教。
原文链接:https://blog.csdn.net/qq_21097885/article/details/88919403