matplotlib: растянуть изображение на всю фигуру - PullRequest
3 голосов
/ 10 марта 2012

Я довольно привык работать с 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")

Я хочу, чтобы изображение сохраняло свое соотношение сторон и масштаб в соответствии с размером рисунка ... поэтому, когда ясохраните его точно в том же размере, что и входной рисунок, и он полностью покрыт изображением.

Спасибо.

Ответы [ 2 ]

6 голосов
/ 10 марта 2012

Я сделал это с помощью следующего фрагмента.

#!/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' иливаше соотношение.

Также, как упомянул Женя в комментариях Подобный вопрос StackOverflow упоминает параметры savefig из bbox_inches='tight' и pad_inches=-1 или p ad_inches=0

1 голос
/ 10 марта 2012

Вы можете использовать функцию, подобную приведенной ниже. Он рассчитывает необходимый размер для фигуры (в дюймах) в соответствии с желаемым разрешением в 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()
...