plotyy
to jedna z moich ulubionych funkcji MATLAB, która uwielbia nienawidzić. Jest to naprawdę przydatna funkcja, z której zawsze wydaje mi się, że robię błędy, do tego stopnia, że całkowicie przestałem jej używać na rzecz ułożenia dwóch (lub więcej) obiektów osi i spiskowania do nich osobno. Następnie możesz ustawić właściwość Position
dla osi "podrzędnych" na takie same, jak osie podstawowe i ładnie się układają.
Funkcjonalny przykład:
xx = linspace(-15,15,100);
yy1 = sin(xx);
yy2 = cos(xx);
f = figure('Color','white');
ax(1) = axes('Parent', f);
ax(2) = axes('Parent', f, 'Color', 'none', 'XTick', [], 'YAxisLocation', 'right');
p1 = plot(ax(1), xx, yy1);
hold(ax(2), 'on'); % Hold to preserve our axes properties set above
p2 = plot(ax(2), xx, yy2);
hold(ax(2), 'off');
ylabel(ax(1),'Phase','FontSize',18);
ylabel(ax(2),'Spectrum','FontSize',18);
set(ax,{'ycolor'},{'k';'k'});
set(p1,'LineWidth',2,'Color',[0.4940,0.1840,0.5560]);
set(p2,'LineWidth',2,'Color','red');
xlabel(ax(1),'Frequency [THz]','FontSize',18);
set(ax,'FontSize',14)
set(ax, 'ActivePositionProperty', 'position'); % Resize based on position rather than outerposition
set(ax(2), 'Position', get(ax(1), 'Position')); % Set last to account for any annotation changes
Wraz z układania osie można również zauważyć, że mam ustawić ActivePositionProperty
do position
(zamiast outerposition
). MATLAB resizes axes automatically, gdy właściwość Units
jest ustawiona na Normalized
i wydaje się, że jest to główne miejsce powstawania problemu. Podczas zmiany rozmiaru MATLAB modyfikuje również wartość OuterPosition
dla drugiej osi, powodując zmianę rozmiaru części wydruku. Różnica jest niewielka, [0 0 1 1]
vs. [0 0.0371 1.0000 0.9599]
w moim przypadku, ale efekt jest oczywiście bardzo wyraźny. Możesz użyć get
i set
, aby to naprawić, ale będziesz musiał to zrobić przy każdej zmianie rozmiaru, co jest dość denerwujące. Alternatywą jest zmiana rozmiaru w oparciu o Position
, która wydaje się łagodzić problem i jest poprawką obecną w implementacji R2015b plotyy
. To również naprawia plotyy
, z wyjątkiem przypadków, gdy okno jest bardzo małe, więc zostawiłem swoją odpowiedź z bardziej ogólnym podejściem.
użyj 'export_fig' –
@AnderBiguri, export_fig nie zapisuje jako pliki .fig. Prawidłowe opcje są następujące: "-pdf", "-eps", "-png", "-tif", "-jpg" i "-bmp". – Sylwia
To, czego doświadczasz, jest niejasne. Czy figura nie jest wyrównana po zapisaniu? Czy też wraca on źle po załadowaniu z pliku '.fig'? W jaki sposób zapisujesz ".fig" w pierwszej kolejności? –