figura de imshow () é muito pequena

96

Estou tentando visualizar uma matriz numpy usando imshow (), pois é semelhante a imagesc () no Matlab.

imshow(random.rand(8, 90), interpolation='nearest')

A figura resultante é muito pequena no centro da janela cinza, enquanto a maior parte do espaço está desocupado. Como posso definir os parâmetros para aumentar a figura? Tentei figsize = (xx, xx) e não é o que eu quero. Obrigado!

Ruofeng
fonte
1
Apenas adicionando este comentário no caso de outros como eu lutarem para pousar neste post --- o problema acontece (mais visivelmente) quando os dados xey são de diferentes ordens de magnitude; A resposta de @bmu corrige o problema
mwarrior

Respostas:

139

Se você não fornecer um aspectargumento para imshow, ele usará o valor para image.aspectem seu matplotlibrc. O padrão para este valor em um novo matplotlibrcé equal. Portanto imshow, plotaremos sua matriz com proporção igual.

Se você não precisa de um aspecto igual, você pode definir aspectcomoauto

imshow(random.rand(8, 90), interpolation='nearest', aspect='auto')

que dá a seguinte figura

imshow-auto

Se você quiser uma proporção igual, você deve adaptar o seu de figsizeacordo com o aspecto

fig, ax = subplots(figsize=(18, 2))
ax.imshow(random.rand(8, 90), interpolation='nearest')
tight_layout()

que dá a você:

imshow-equal

bmu
fonte
além de definir a relação de aspecto, é possível obter (definir) o tamanho dos ladrilhos coloridos?
Alexander Cska
36

Isso é estranho, definitivamente funciona para mim:

from matplotlib import pyplot as plt

plt.figure(figsize = (20,2))
plt.imshow(random.rand(8, 90), interpolation='nearest')

Estou usando o backend "MacOSX", aliás.

Nikolas
fonte
4
para ficar claro, deve ser plt.figure(figsize = (x_new, y_new))e para imgshow () você deve importar ioimage agora porque o SciPy imageshow () será descontinuado em breve
Agile Bean
1
@AgileBean seria útil se você editasse esta postagem com essas informações ou a adicionasse como uma resposta a esta pergunta
baxx
2

Eu também sou novo em python. Aqui está algo que parece que fará o que você quiser

axes([0.08, 0.08, 0.94-0.08, 0.94-0.08]) #[left, bottom, width, height]
axis('scaled')`

Acredito que isso decida o tamanho da tela.

Toylas
fonte
1

Atualização 2020

conforme solicitado por @baxxx, aqui está uma atualização porque random.randestá obsoleta por enquanto.

Isso funciona com matplotlip 3.2.1:

from matplotlib import pyplot as plt
import random
import numpy as np

random = np.random.random ([8,90])

plt.figure(figsize = (20,2))
plt.imshow(random, interpolation='nearest')

Este trama:

insira a descrição da imagem aqui

Para alterar o número aleatório, você pode experimentar np.random.normal(0,1,(8,90))(aqui média = 0, desvio padrão = 1).

Feijão Ágil
fonte