2012-03-09 44 views
3

我很習慣與matlab一起工作,現在試圖使matplotlib和numpy變換。在matplotlib中有一種方法,你正在繪製的圖像佔據了整個圖形窗口。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") 

我想要的圖像,以保持它的縱橫比和比例的圖形的尺寸...所以當我savefig它完全一樣的尺寸與輸入的數字,並且它完全被覆蓋的圖像。

謝謝。

+0

看看這個例子:http://stackoverflow.com/questions/4042192/reduce-在matplotlib中繪製左右邊緣圖 – 2012-03-10 00:36:21

回答

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() 

注意對兩側的灰色邊框是與軸的方面rario這是通過設置aspect='equal',或aspect='auto'或您的比例改變。

也由振亞在評論Similar StackOverflow Question 提到提到的參數的bbox_inches='tight'savefigpad_inches=-1或P ad_inches=0

+0

加上一個用於'bbox_inches ='tight''這真的回答了這個問題。 – Peaceful 2017-11-02 08:43:10

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()