2

我需要生成适合特定宽度并使用特定字体大小的图形,最好不要对 pdf 文件进行后处理。

在我的系统上,默认的 GUI 后端是“TkAgg”,默认字体大小是 12.0,由get_fontsize()文本对象上的方法报告。当我使用生成图形时

f = pyplot.figure(figsize=(2.0,2.0))
f.text(0.5,0.5,'TEXT')
pyplot.show()

并另存为PDF,图形尺寸太大。pdfinfo报告

Creator:        matplotlib 1.1.1rc, http://matplotlib.sf.net
Producer:       matplotlib pdf backend
CreationDate:   Sat May 25 10:52:02 2013
Tagged:         no
Pages:          1
Encrypted:      no
Page size:      196.2 x 153 pts
File size:      9357 bytes
Optimized:      no
PDF version:    1.4

196.2== 2.725 英寸

但是,如果我将图形调整为 2 英寸宽,则字体大小(在视觉上)与 12pt LaTeX 字体匹配。

相反,跳过 GUI 会生成一个尺寸正确的图形,但字体太大:

import matplotlib
matplotlib.use('PDF')
f = pyplot.figure(figsize=(2.0,2.0))
f.text(0.5,0.5,'TEXT')
f.savefig('test.pdf')

Creator:        matplotlib 1.1.1rc, http://matplotlib.sf.net
Producer:       matplotlib pdf backend
CreationDate:   Sat May 25 10:50:42 2013
Tagged:         no
Pages:          1
Encrypted:      no
Page size:      144 x 144 pts
File size:      9254 bytes
Optimized:      no
PDF version:    1.4

144 磅 == 2.0 英寸

Cairo 后端产生相同的结果。添加f.set_size_inches((2,2))也不会改变任何东西。

是否有使用 matplotlib 获得恰到好处的字体和图形大小的方法?

4

2 回答 2

2

检查你的.matplotlibrc并寻找sivefig.bbox,确保它被注释掉,或者设置为不是 tight的东西。

你可以试试:

fig.savefig('so.png', bbox_inches=matplotlib.transforms.Bbox(np.array(((0, 0), (2, 2)))))

明确设置边界框。

也就是说,如果您的 . 文件中没有任何内容.matplotlibrc,则应将此报告为错误。

于 2013-05-26T21:23:12.097 回答
0

您应该使用 fig.set_size_inches 因为您可以准确给出 pdf 的物理大小。

于 2013-05-25T20:43:21.133 回答