liczba imshow () jest za mała

98

Próbuję zwizualizować tablicę numpy przy użyciu imshow (), ponieważ jest podobna do imagesc () w Matlabie.

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

Wynikowa liczba jest bardzo mała w środku szarego okna, podczas gdy większość miejsca jest niezajęta. Jak ustawić parametry, aby zwiększyć liczbę? Próbowałem figsize = (xx, xx) i nie tego chcę. Dzięki!

Ruofeng
źródło
1
Dodanie tego komentarza na wypadek, gdyby inni tacy jak ja mieli problem z wylądowaniem w tym poście --- problem występuje (najbardziej widocznie), gdy dane x i y mają różne rzędy wielkości; Odpowiedź @ bmu rozwiązuje problem
mwarrior

Odpowiedzi:

146

Jeśli nie podasz aspectargumentu imshow, użyje wartości for image.aspectw twoim matplotlibrc. Wartością domyślną w nowym matplotlibrcjest equal. Więc imshowwykreśli twoją tablicę z równym współczynnikiem proporcji.

Jeśli nie potrzebują równej aspekt można ustawić aspectnaauto

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

co daje następujący rysunek

imshow-auto

Jeśli chcesz mieć równy współczynnik proporcji, musisz dostosować figsizego do aspektu

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

co daje:

imshow-equal

bmu
źródło
czy oprócz określenia współczynnika kształtu można uzyskać (zdefiniować) rozmiar kolorowych płytek?
Alexander Cska
37

To dziwne, zdecydowanie działa na mnie:

from matplotlib import pyplot as plt

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

Przy okazji, używam zaplecza "MacOSX".

Nikolas
źródło
5
aby było jasne, musi być plt.figure(figsize = (x_new, y_new))i dla imgshow () musisz teraz zaimportować ioimage, ponieważ SciPy imageshow () zostanie wkrótce wycofane
Agile Bean
1
@AgileBean przydałoby się, gdybyś edytować ten post z tymi informacjami lub dodać go jako odpowiedź na to pytanie
baxx
2

Jestem też nowy w Pythonie. Oto coś, co wygląda na to, że zrobi to, co chcesz

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

Myślę, że to decyduje o wielkości płótna.

toylas
źródło
1

Zaktualizuj 2020

zgodnie z prośbą @baxxx, tutaj jest aktualizacja, ponieważ w random.randmiędzyczasie jest przestarzała.

Działa to z 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')

To działa:

wprowadź opis obrazu tutaj

Aby zmienić liczbę losową, możesz poeksperymentować z np.random.normal(0,1,(8,90))(tutaj średnia = 0, odchylenie standardowe = 1).

Agile Bean
źródło