看起来bbox_inches='tight'
选项试图让你的身材与坐标轴符合。为了避免这种情况,您可以将该图的实际范围提供给plt.savefig
方法。
import matplotlib.pyplot as plt
img = plt.imread('myimage.jpg')
ymax, xmax, _ = img.shape
plt.imshow(img, extent=[0,xmax,ymax,0]) # switch to pixel coords
plt.plot([100,200,300],[100,200,300],'ro')
plt.imshow(img, extent=[0,xmax,ymax,0]) # recenter plot
plt.axis('off')
# get figure and axis handle
fig = plt.gcf()
ax = plt.gca()
# get axis extent
extent = ax.get_window_extent().transformed(fig.dpi_scale_trans.inverted())
plt.savefig('out.jpg', bbox_inches=extent)
如果出于某种原因想要为图形添加一个小白色边缘,您仍然可以这样做;只是扩大范围如下
extent2 = extent.expanded(1.01, 1.01)
plt.savefig('out.jpg', bbox_inches=extent2)
的其他选项将得到-RID离轴边界完全使用matehat's建议。
import matplotlib.pyplot as plt
img = plt.imread('myimage.jpg')
ymax, xmax, _ = img.shape
my_dpi = 80.
my_figsize = [xmax/my_dpi, ymax/my_dpi]
fig = plt.figure(figsize=my_figsize, dpi=my_dpi)
ax = plt.Axes(fig, [0., 0., 1., 1.])
ax.set_axis_off()
fig.add_axes(ax)
h_im = ax.imshow(img, aspect = 'equal', extent=[0,xmax,ymax,0])
plt.plot([100,200,300],[100,200,300],'ro')
plt.axis(h_im.get_extent())
plt.savefig('out.jpg', dpi = my_dpi)
尽管最终图像具有原始图像大小,但两个图像之间存在子像素差异。下图显示了myimage.jpg
和out.jpg
之间的差异。
因为matplotlib几乎是相同的它是如何工作方面MATLAB。 – Vivek