Die Zahl von imshow () ist zu klein

95

Ich versuche, ein numpy-Array mit imshow () zu visualisieren, da es imagesc () in Matlab ähnelt.

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

Die resultierende Figur ist in der Mitte des grauen Fensters sehr klein, während der größte Teil des Raums nicht belegt ist. Wie kann ich die Parameter einstellen, um die Figur größer zu machen? Ich habe figsize = (xx, xx) ausprobiert und es ist nicht das, was ich will. Vielen Dank!

Ruofeng
quelle
1
Fügen Sie einfach diesen Kommentar hinzu, falls andere wie ich Schwierigkeiten haben, in diesem Beitrag zu landen - das Problem tritt (am sichtbarsten) auf, wenn die x- und y-Daten unterschiedliche Größenordnungen haben; @ bmus Antwort behebt es
mwarrior

Antworten:

138

Wenn Sie kein aspectArgument angeben imshow, wird der Wert für image.aspectin Ihrem verwendet matplotlibrc. Der Standardwert für diesen Wert in einem neuen matplotlibrcist equal. So imshowwird Ihr Array mit gleichem Seitenverhältnis geplottet.

Wenn Sie nicht über einen gleichen Aspekt müssen Sie festlegen können , aspectzuauto

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

das gibt die folgende Abbildung

imshow-auto

Wenn Sie ein gleiches Seitenverhältnis wünschen, müssen Sie figsizees an den Aspekt anpassen

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

was dir gibt:

imshow-gleich

bmu
quelle
Ist es neben der Definition des Seitenverhältnisses möglich, die Größe der farbigen Kacheln zu ermitteln (zu definieren)?
Alexander Cska
36

Das ist seltsam, es funktioniert definitiv für mich:

from matplotlib import pyplot as plt

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

Ich benutze übrigens das "MacOSX" Backend.

Nikolas
quelle
4
um klar zu sein, muss es sein plt.figure(figsize = (x_new, y_new))und für imgshow () müssen Sie jetzt ioimage importieren, da die SciPy imageshow () bald veraltet sein wird
Agile Bean
1
@AgileBean Es wäre nützlich, wenn Sie diesen Beitrag entweder mit diesen Informationen bearbeiten oder als Antwort auf diese Frage
hinzufügen würden
2

Ich bin auch neu in Python. Hier ist etwas, das so aussieht, als würde es tun, was Sie wollen

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

Ich glaube, das entscheidet über die Größe der Leinwand.

toylas
quelle
1

Update 2020

Wie von @baxxx angefordert, ist hier ein Update, da random.randes mittlerweile veraltet ist.

Dies funktioniert mit 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')

Diese Handlungen:

Geben Sie hier die Bildbeschreibung ein

Um die Zufallszahl zu ändern, können Sie experimentieren np.random.normal(0,1,(8,90))(hier Mittelwert = 0, Standardabweichung = 1).

Agile Bohne
quelle