it-swarm.com.de

Wie kann ich die Größe des Unterplots in der MATLAB-Figur einstellen?

Ich muss oft 10 Bilder zusammen zeichnen, aber die Verwendung dieses Codes führt zu kleinen Bildern: 

img = Rand(400,600); 
for i=1:10
 subplot(2,5,i); 
 imshow(img); 
 title(['Image ' int2str(i)]); 
end

Wie Sie sehen, verwenden die Bilder nicht den gesamten verfügbaren Platz auf dem Bildschirm. Wie kann ich die Größe erhöhen oder den Abstand/Abstand zwischen ihnen verringern?

enter image description here

Danke für jede Hilfe.

8
jeff

Ich glaube nicht, dass es einen einfachen Weg gibt. Es gibt zwei Möglichkeiten:

Verwenden Sie zuerst den Positionsteil des Unterplots:

>> subplot(2,5, i, [l, b, w, h])

und berechnen Sie die linke, untere, Breite, Höhe.

Oder rufen Sie das Handle der zurückgegebenen Achse ab:

>> h(i) = subplot(2,5,i);

und ändern Sie anschließend die Achse.

>> set(h(1), 'position', [l, b, w, h] );

Es gibt eine Reihe von Seiten, die detailliertere Informationen enthalten, z. B. http://www.briandalessandro.com/blog/how-to-make-a-borderless-subplot-of-images-in-matlab/

[aktualisieren]

Der folgende Code gibt ein wenig mehr Details darüber, wen Sie so etwas wie das tun können, wonach Sie suchen. Es ist ein bisschen langweilig. Die Werte 0,95 und 0,02 dienen nur als Polsterung. Sie sind nichts Magisches. :-)

Eine andere Sache, die zu beachten ist, ist, dass ich Sie wirklich ermutigen würde, "ii" als Ihre Indexvariable (oder etwas anderes) zu verwenden, da "i" als sqrt (-1) definiert ist. Es ist eine gute Konvention, "i" und "j" nicht als Indexvariablen zu verwenden (insbesondere in Matlab).

img = Rand(400,600); 

figure(1);
clf();
hold on;

% Get the width and height of the figure
lbwh = get(1, 'position');
figw = lbwh(3);
figh = lbwh(4);

% Number of rows and columns of axes
ncols = 5;
nrows = 2;

% w and h of each axis in normalized units
axisw = (1 / ncols) * 0.95
axish = (1 / nrows) * 0.95

for ii=1:10

    % calculate the row and column of the subplot
    row = floor( ii/(ncols+1) ) + 1
    col = mod( ii-1, ncols ) + 1

    % calculate the left, bottom coordinate of this subplot
    axisl = (axisw+0.02) * (col-1)
    axisb = (axish+0.02) * (row-1)

    %  plot the subplot
    h= subplot('position', [axisl, axisb, axisw, axish] ); 
    imshow(img); 
    title(['Image ' int2str(ii)]); 

    pause
end

Sie müssen damit spielen, damit es genau das macht, was Sie wollen. Und "Hilfe" ist dein Freund.

10
brechmos

Ich habe diese Anforderung häufig, und der effizienteste Weg für mich, dies zu erreichen, ist die Verwendung der Funktion subplot_tight von Drittanbietern. Diese Funktion ist mehr oder weniger ein Ersatz für subplot. Am einfachsten können Sie das tun

figure(1); clf
subplot_tight(1,2,1, [0.05 0.05])
%normal plot stuff

dabei steuern die beiden Parameter im vierten Argument den Anteil des sichtbaren Raums um das Bild.

4
xenoclast

Basierend auf der Antwort von @brechmos löst der Code einen Fehler aus, wenn Ihre Subplotnummer mehr als 10 Subplots ist.

 % calculate the row and column of the subplot
 row = floor( ii/(ncols+1) ) + 1
 col = mod( ii-1, ncols ) + 1

z.B. 4X5-Zellen, dann wird Subplot 11 falsch als (2, 1) interpretiert, aber nicht (3,1).

Ersetzen Sie es durch den folgenden Code, um es zu beheben:

% calculate current row and column of the subplot
row = floor( (i-0.5)/ncols ) + 1;
col = mod(i-(row-1)*ncols, ncols+1); 
3
ouxiaogu

Sie können die Option Abbildungseigenschaften verwenden, sobald Sie die Zeichnung erstellt haben. Klicken Sie auf das Subplot, dessen Größe Sie ändern möchten. Wählen Sie im Eigenschafteneditor die Option "Weitere Eigenschaften" aus. Wenn Sie dort blättern, wird die Registerkarte "Position" angezeigt. Sie können diese Werte ändern, um zu sehen, wie sich das Subplot bewegt, und das Subplot entsprechend Ihren Vorlieben anzupassen.

0
Nahar