2016-03-27 7 views
-1

Ich definiere Position als Konstante (101) in Code 1, während als Dezimalzahl (1.01) in Code 2. Ich bin der Unterschied zwischen den Codes in Achsen Ticks. -Code 1Warum Achsen Zecken abhängig von Position in Matlab?

hFig=figure('Visible', 'on', 'Units', 'inches', 'Position', [0 0 15 15]); 
set(gca, 'position', [0 0 101 101]); 
xlabel(gca, 'Time/s'); 
x = 0:0.01:1; 
y = sin(x); 
plot(x,y); 

Ausgabe ohne Achsen ticks

enter image description here

-Code 2

hFig=figure('Visible', 'on', 'Units', 'inches', 'Position', [0 0 15 15]);  
set(gca, 'position', [0 0 1.01 1.01]); 
xlabel(gca, 'Time/s'); 
x = 0:0.01:1; 
y = sin(x); 
plot(x,y); 

Ausgang mit den Achsen ticks

enter image description here


In beiden Fällen gibt es keine Ausgabe von xlabel aus irgendeinem Grund. Dies hängt möglicherweise mit dem Tick-Problem der Achsen zusammen. Das Ändern der Position des Befehls hat das Verhalten nicht geändert. In der Ausgabe von Code 2 gibt es Achsen-Ticks, aber nicht in Ausgabe von Code 1.


Warum gibt es so unterschiedliche Ausgänge in Achsen-Ticks?

+0

Verstehst du, was 'position' tut? –

+0

@OliverCharlesworth Du meinst die zweite Position, zum Beispiel: '[linke untere Breite Höhe]'. Also 0 links, 0 unten, aber A width und A height. Hier gehe ich davon aus, dass ich für Breite und Höhe einen beliebigen Wert angeben kann. Warum also nicht die Dezimalzahl? –

Antwort

1

Es gibt drei Probleme hier.

  1. Sie halten Referenzierung gca ohne explizit eine axes zu schaffen. Als Ergebnis wird Ihre xlabel auf die falsche Sache angewendet, weil gca ist tatsächlich Bezug auf eine axes in einer anderen Figur. Um dies zu beheben, versuchen Sie etwas wie.

    fig = figure(); 
    axes('Parent', fig) % Explicitly create the axes 
    xlabel(gca, 'xlabel') 
    
  2. Position Die Eigenschaft des axes (Standard) ist normalisierten Einheiten. Das bedeutet, dass alle Werte zwischen 0 und 1 liegen. Wie Sie in Ihrem zweiten Beispiel sehen können, haben Sie die letzten beiden Elemente des Positionsarrays (Breite und Höhe) auf 1,01 gesetzt, was größer als 1 ist und Sie plotten größer als Ihre Figur. In Ihrem ersten Beispiel haben Sie die Breite und Höhe auf 101 gesetzt, was Weg höher als 1 ist und bewirkt, dass die Größe der Achsen 100 mal größer als Ihre Figur ist. Wenn Sie genau hinschauen, können Sie sogar sehen, dass Ihre Achsen im ersten Fall so groß sind, dass sie wie eine andere Kurve aussieht. Auch deshalb sehen Sie keine Achsen Ticks.

  3. Die Position ist die Position der Achsen selbst und nicht umfassen die xticks, yticks, xlabels, ylabels oder Titel. Da Sie Ihre Äxte so groß wie Ihre Figur machen, werden Sie keine dieser Etiketten so sehen, wie Sie sie haben. Wenn Sie die Achsenposition festlegen und automatisch den Platzbedarf für die Hilfsstrichsbeschriftungen usw. berücksichtigen möchten, sollten Sie stattdessen die Eigenschaft OuterPosition festlegen.

    set(gca, 'OuterPosition', [0 0 1 1])` 
    
+1

@Masi Sie * figure * ist 15x15 * Zoll * Ihre 'Achsen' verwenden normalisierte Einheiten, weil * Sie * explizit nichts anderes angegeben haben. Sie können dies leicht mit 'get (gca, 'Units') überprüfen. Ich bin mir auch nicht sicher, was du mit dem zweiten Satz meinst. Es klingt wie es für Sie funktioniert hat? – Suever

+3

@Masi Sie erkennen, dass eine "Figur" nicht die gleiche ist wie eine "Achse" oder? 'gcf' bezieht sich auf die aktuelle Figur und' gca' bezieht sich auf die aktuellen 'Achsen' – Suever

+1

@Masi MATLAB wird gerne tun, was immer Sie ihm in Bezug auf die Position sagen. Ich bin mir nicht sicher, was Sie mit dem zweiten Teil Ihrer Frage meinen. die Eigenschaften der "Achsen" und "Figur" sind nie miteinander verknüpft und werden niemals aus gutem Grund sein (Sie können mehrere "Achsen" innerhalb einer einzigen "Figur" haben) – Suever

Verwandte Themen