3

我正在尝试将 png 图像添加到用matplotlibpython 创建的绘图中。

这是我的情节代码

import matplotlib as mpl
mpl.use('Agg')
import matplotlib.pyplot as plt


fig = plt.figure(figsize=(5.5,3),dpi=300)
ax = fig.add_subplot(111)
ax.grid(True,which='both')

ax.plot([0,1,2,3],[5,2,6,3],'o')

xlabel = ax.set_xlabel('xlab')
ax.set_ylabel('ylab')


from PIL import Image
import numpy as np

im = Image.open('./lib/Green&Energy-final-roundonly_xsmall.png')
im_w = im.size[0]
im_h = im.size[1]
# We need a float array between 0-1, rather than
# a uint8 array between 0-255
im = np.array(im).astype(np.float) / 255

fig.figimage(im,fig.bbox.xmax - im_w - 2,2,zorder=10 )
fig.savefig('test.png',bbox_extra_artists=[xlabel], bbox_inches='tight')

该图有 513x306 px 保存为 pdf,但值为fig.bbox.xmax...1650.0这就是为什么我的图没有出现.... 在打印之前我怎么知道图像的大小,所以我可以知道把我的im?

谢谢

4

1 回答 1

3

这里发生了两件事:

  1. 正如@tcaswell 提到的,bbox_inches='tight'将生成的图像裁剪下来
  2. 您实际上并没有以 300 dpi 保存图像,而是以 100 dpi 保存图像

第二项是一个常见的问题。默认情况下,matplotlib 以与图形的原生 dpi 不同的 dpi(可在 rc 参数中配置)保存图形。

要解决此问题,请传入fig.dpito fig.savefig

fig.savefig(filename, dpi=fig.dpi, ...)

为了绕过裁剪,要么a)bbox_inches='tight'完全省略,要么b)调整图形内部的大小。完成 (b) 的一种快速方法是使用fig.tight_layout,尽管它不会像使用bbox_incheswith savefig 那样被“严格”裁剪。

于 2013-05-02T15:32:31.023 回答