le chiffre de imshow () est trop petit

96

J'essaie de visualiser un tableau numpy en utilisant imshow () car il est similaire à imagesc () dans Matlab.

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

Le chiffre qui en résulte est très petit au centre de la fenêtre grise, alors que la majeure partie de l'espace est inoccupée. Comment puis-je définir les paramètres pour agrandir la figure? J'ai essayé figsize = (xx, xx) et ce n'est pas ce que je veux. Merci!

Ruofeng
la source
1
Il suffit d'ajouter ce commentaire au cas où d'autres comme moi auraient du mal à atterrir sur ce post - le problème se produit (le plus visiblement) lorsque les données x et y sont d'ordres de grandeur différents; La réponse de @ bmu le corrige
mwarrior

Réponses:

142

Si vous ne donnez pas d' aspectargument à imshow, il utilisera la valeur pour image.aspectdans votre matplotlibrc. La valeur par défaut pour cette valeur dans un nouveau matplotlibrcest equal. Alors imshowtracera votre tableau avec un rapport hauteur / largeur égal.

Si vous n'avez pas besoin de la même esthétique que vous pouvez définir aspectàauto

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

ce qui donne la figure suivante

imshow-auto

Si vous voulez un rapport hauteur / largeur égal, vous devez adapter votre en figsizefonction de l'aspect

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

ce qui vous donne:

imshow-equal

bmu
la source
en plus de définir le rapport hauteur / largeur, est-il possible d'obtenir (définir) la taille des carreaux colorés?
Alexander Cska le
36

C'est étrange, cela fonctionne vraiment pour moi:

from matplotlib import pyplot as plt

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

J'utilise le backend "MacOSX", btw.

Nikolas
la source
4
pour être clair, cela doit l'être plt.figure(figsize = (x_new, y_new))et pour imgshow (), vous devez maintenant importer ioimage car le sciPy imageshow () sera bientôt obsolète
Agile Bean
1
@AgileBean, il serait utile que vous éditiez ce message avec ces informations ou que vous l'ajoutiez comme réponse à cette question
baxx
2

Je suis aussi nouveau en python. Voici quelque chose qui semble faire ce que vous voulez

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

Je crois que cela décide de la taille de la toile.

toylas
la source
1

Mise à jour 2020

comme demandé par @baxxx, voici une mise à jour car elle random.randest obsolète entre-temps.

Cela fonctionne avec 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')

Cela trace:

entrez la description de l'image ici

Pour changer le nombre aléatoire, vous pouvez expérimenter avec np.random.normal(0,1,(8,90))(ici moyenne = 0, écart type = 1).

Haricot agile
la source