我很习惯使用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")
我希望图像保持其宽高比并缩放到图形的大小......所以当我保存它时,它与输入图形完全相同,并且它完全由图像覆盖。
感谢。
答案 0 :(得分:6)
我使用以下代码段完成了此操作。
#!/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'
或您的比率来改变。
正如Zhenya在评论Similar StackOverflow Question中提到的那样
提到[{1}} savefig
和bbox_inches='tight'
或pad_inches=-1
ad_inches=0
的参数
答案 1 :(得分:1)
您可以使用如下所示的功能。 它根据您想要的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()
答案 2 :(得分:-1)
这是一个最小的面向对象的解决方案:
fig = plt.figure(figsize=(8, 8))
ax = fig.add_axes([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
调用之后。这是matplotlib's tight_layout functionality的重要部分,它被Jupyter渲染器之类的东西隐式调用。