matplotlib:拉伸图像以覆盖整个图形
我非常习惯于使用matlab,现在尝试转换matplotlib和numpy。matplotlib中是否有一种方法可以使正在绘制的图像占据整个地物窗口matplotlib:拉伸图像以覆盖整个图形,matplotlib,figure,Matplotlib,Figure,我非常习惯于使用matlab,现在尝试转换matplotlib和numpy。matplotlib中是否有一种方法可以使正在绘制的图像占据整个地物窗口 import numpy as np import matplotlib.pyplot as plt # get image im as nparray # ........ plt.figure() plt.imshow(im) plt.set_cmap('hot') plt.savefig("frame.png") 我希望图像保持它的纵
import numpy as np
import matplotlib.pyplot as plt
# get image im as nparray
# ........
plt.figure()
plt.imshow(im)
plt.set_cmap('hot')
plt.savefig("frame.png")
我希望图像保持它的纵横比和比例,以数字的大小。。。因此,当我保存它时,它的大小与输入的图形完全相同,并且完全被图像覆盖
谢谢。您可以使用下面的函数。 它根据所需的dpi分辨率计算图形所需的大小(以英寸为单位)
import numpy as np
import matplotlib.pyplot as plt
def plot_im(image, dpi=80):
px,py = im.shape # depending of your matplotlib.rc you may
have to use py,px instead
#px,py = im[:,:,0].shape # if image has a (x,y,z) shape
size = (py/np.float(dpi), px/np.float(dpi)) # note the np.float()
fig = plt.figure(figsize=size, dpi=dpi)
ax = fig.add_axes([0, 0, 1, 1])
# Customize the axis
# remove top and right spines
ax.spines['right'].set_color('none')
ax.spines['left'].set_color('none')
ax.spines['top'].set_color('none')
ax.spines['bottom'].set_color('none')
# turn off ticks
ax.xaxis.set_ticks_position('none')
ax.yaxis.set_ticks_position('none')
ax.xaxis.set_ticklabels([])
ax.yaxis.set_ticklabels([])
ax.imshow(im)
plt.show()
我使用以下代码片段完成了这项工作
#!/usr/bin/env python
import numpy as np
import matplotlib.cm as cm
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt
from pylab import *
delta = 0.025
x = y = np.arange(-3.0, 3.0, delta)
X, Y = np.meshgrid(x, y)
Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
Z2 = mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1)
Z = Z2-Z1 # difference of Gaussians
ax = Axes(plt.gcf(),[0,0,1,1],yticks=[],xticks=[],frame_on=False)
plt.gcf().delaxes(plt.gca())
plt.gcf().add_axes(ax)
im = plt.imshow(Z, cmap=cm.gray)
plt.show()
注意:侧面的灰色边框与轴的纵横比有关,可通过设置aspect='equal'
或aspect='auto'
或您的比率进行更改
也如振亚在评论中提到的
提到了
bbox\u inches='tight'
和pad\u inches=-1
或pad\u inches=0
的savefig
的参数,这里有一个最小的面向对象解决方案:
fig=plt.figure(figsize=(8,8))
ax=fig.add_轴([0,0,1,1],frameon=False,xticks=[],yticks=[]))
用计算机测试它
ax.imshow([[0]])
fig.savefig('test.png')
保存一个统一的紫色块
编辑:正如@duhaime在下面指出的,这要求图形具有与轴相同的外观
如果要根据图形调整轴的大小,请将aspect='auto'
添加到imshow
如果要将地物调整大小以调整到轴的大小,请添加
from matplotlib import tight_bbox
bbox = fig.get_tightbbox(fig.canvas.get_renderer())
tight_bbox.adjust_bbox(fig, bbox, fig.canvas.fixed_dpi)
在
imshow
调用之后。这是Jupyter的渲染器之类的东西隐式调用的重要部分。看看这一点:这些答案都没有填满整个数字,但这里的答案是:加上一个用于bbox\u inches='tight'
,这真正回答了这个问题。这只适用于方形图像。尝试figsize=(2,8)
添加了一个修复程序。