Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

matplotlib: Stretch image to cover the whole figure

I am quite used to working with matlab and now trying to make the shift matplotlib and numpy. Is there a way in matplotlib that an image you are plotting occupies the whole figure window.

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

I want the image to maintain its aspect ratio and scale to the size of the figure ... so when I do savefig it exactly the same size as the input figure, and it is completely covered by the image.

Thanks.

like image 853
ahmadh Avatar asked Mar 09 '12 22:03

ahmadh


1 Answers

I did this using the following snippet.

#!/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()

Note the grey border on the sides is related to the aspect rario of the Axes which is altered by setting aspect='equal', or aspect='auto' or your ratio.

Also as mentioned by Zhenya in the comments Similar StackOverflow Question mentions the parameters to savefig of bbox_inches='tight' and pad_inches=-1 or pad_inches=0

like image 115
Appleman1234 Avatar answered Oct 04 '22 00:10

Appleman1234