plotyy
è stata una delle mie funzioni MATLAB preferite da amare odiare. È una funzione davvero utile con cui mi sembra sempre di imbattersi in bug, al punto in cui ho completamente smesso di usarla per impilare solo due (o più) oggetti di assi e tracciandoli separatamente. È quindi possibile impostare la proprietà Position
degli assi "secondari" come gli assi primari e verranno impilati correttamente.
Un esempio funzionale:
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
Insieme con impilamento gli assi è possibile notare che ho impostato il ActivePositionProperty
a position
(anziché outerposition
). MATLAB resizes axes automatically quando la proprietà Units
è impostata su Normalized
e sembra che questo sia il punto principale in cui si verifica il problema. Durante il ridimensionamento, MATLAB modifica anche il valore OuterPosition
per i secondi assi, provocando la ridimensionamento della porzione di stampa. La differenza è piccola, [0 0 1 1]
rispetto a [0 0.0371 1.0000 0.9599]
nel mio caso, ma l'effetto è ovviamente molto pronunciato. È possibile utilizzare get
e set
per risolvere questo problema, ma è necessario farlo su ogni ridimensionamento che è abbastanza fastidioso. L'alternativa è ridimensionare in base allo Position
, che sembra alleviare il problema ed è un tweak presente nell'implementazione R2015b di plotyy
. Questo corregge anche plotyy
tranne per i casi in cui la finestra è molto piccola, quindi ho lasciato la mia risposta con l'approccio più generico.
usare 'export_fig' –
@AnderBiguri, export_fig non salva come file .fig. Le opzioni valide sono le seguenti: '-pdf', '-eps', '-png', '-tif', '-jpg' e '-bmp'. – Sylwia
Quello che stai vivendo non è chiaro. La figura diventa disallineata dopo averla salvata? O torna solo disallineato quando lo si carica dal file '.fig'? Come stai salvando '.fig' in primo luogo? –