Ich erstelle eine Multi-Panel-Figur in MATLAB (mit mehreren Achsen von verschiedenen Größe). Ich möchte, dass alle Teilstriche die gleiche absolute Größe über alle Teilpläne haben.Achsen Ticks gleicher Länge über Unterplots in MATLAB
Nach der MATLAB user guide, tick Länge bezüglich der längsten Achse normalisiert wird:
TickLength. Tick-Markierungslänge, angegeben als ein Zwei-Element-Vektor der Form [2Dlength 3Dlength]. [...] Geben Sie die Werte in Einheiten an, die relativ zur längsten Linie der sichtbaren X-Achse, Y-Achse oder Z-Achse normalisiert sind.
Um alle Zecken der gleichen Länge zu machen, ich bin mit dem folgenden Code:
fixlen = 0.005; % Desired target length
for i = 1:numel(h) % Loop over axes handles
rect = get(h(i),'Position'); % Get the axis position
width = rect(3); % Axis width
height = rect(4); % Axis height
axislen = max([height,width]); % Get longest axis
ticklen = fixlen/axislen; % Fix length
set(h(i),'TickDir','out','TickLength',ticklen*[1 1]);
end
Leider produziert der oben genannte Code tut nicht eine Figur, in der alle Tick Längen gleich sind . Vielleicht fehlt mir etwas?
Lösung. In meinem Code gab es zwei Probleme.
allererst, musste ich von
Normalized
Einheiten auf einige feste Einheiten (wie beispielsweise Pixel) schalten. Siehe die Antwort unten.In einem Teil des Codes, vor dem obigen Snippet, habe ich die Größe geändert und ich hatte eine , um es zu aktualisieren. MATLAB würde jedoch das Code-Snippet erreichen, bevor die Grafikbefehle ausgeführt wurden und daher die angegebenen Größen nicht korrekt waren. Ich löste das Problem, indem ich einen
pause(0.1)
Befehl nach derdrawnow
platzierte.
Ihre Lösung funktioniert für mich, auf MATLAB 2015a (Mac). –