删除白色边框并设置最终图像大小matplotlib

时间:2016-04-28 12:00:18

标签: python matplotlib

如何删除这些白色边框?为什么轴从-100,-100开始?最后,我如何设置最终png图像的大小?

import matplotlib.pyplot as plt
import matplotlib
import numpy as np

im = plt.imread('pitch.png')
implot = plt.imshow(im, aspect='auto')

dpi=96

if dpi is None:
        dpi = matplotlib.rcParams['savefig.dpi']
dpi = float(dpi)

fig = plt.figure(figsize=(620/dpi, 579/dpi), dpi=dpi)
ax = fig.add_axes([0, 0, 1, 1], frame_on=False)
ax.imshow(im, interpolation='none')

x, y = np.genfromtxt('coords.csv', delimiter=',', unpack=True)
plt.plot(x,y, "o")

plt.savefig('dybala.png', bbox_inches='tight')

enter image description here

1 个答案:

答案 0 :(得分:0)

使用imshow and plot in the same plot会导致白色边框。单独使用imshow时,轴的限制将设置为图像的限制。但是,绘制轴时会自动更新。

最简单的解决方案是在imshow之后获得轴限制,并在绘图后将其重新应用于图中。例如,首先获得限制:

implot = plt.imshow(im, aspect='auto')
xlim, ylim = plt.xlim(), plt.ylim()

然后设置它们:

plt.plot(x,y, "o")
plt.xlim(xlim)
plt.ylim(ylim)

那应该删除空格。

要设置保存的最终数字的大小,您可以将figsize=(w,h)(以英寸为单位)传递到savefig,同时将dpi(每英寸点数)传递给最终确定图片尺寸。如果您要查找特定的像素大小,可以通过w dpi,h dpi来计算。

plt.savefig('dybala.png', figsize=(8,6), dpi=200)

这给出了PNG格式的(8英寸x 6英寸)* 200 = 1600 x 1200像素图像。但请注意,如果您使用bbox_inches='tight'删除图周围的空白,则会在大小调整后发生,并返回较小的图像。

您可以通过使用plt.axis('off')删除图形轴来解决此问题。如果您将DPI设置为与源图像的DPI相匹配并相应地缩放figsize,则应该能够使用bbox_inches='tight'保存并返回与原始尺寸匹配的图像。