Следующий MVCE воспроизводит проблему, с которой я сталкиваюсь при отображении легенды на фигуре с несколькими объектами осей.
Чтобы построить профиль высоты местности, я использую две оси:
ax(1)
для неба на заднем планеax(2)
для местности на переднем плане
Во время построения графиков я работаю с каждым набором осей независимо, а в конце процесса я связываю ax(1)
и ax(2)
с помощью linkaxes(ax, 'xy')
, чтобы они оставались синхронизированными по размеру.
Наконец, я добавляю legend
в положение 'southoutside'
, но только оси переднего плана автоматически уменьшаются, чтобы освободить место для легенды, оси фона остаются неизменными, что мешает предполагаемому макету, как показано на следующем рисунке:
Самой целью использования linkaxes
было предотвратить такое нежелательное поведение.
Буду признателен, если кто-нибудь подскажет, как решить эту проблему.
Обновлять
В ответ на комментарий gnovice :
Причина, по которой я использую две оси, заключается в том, что я думал, что это единственный возможный способ объединить разные цветовые карты на одном рисунке. Обратите внимание, что для неба я использую sky_map
, а для местности — demcmap
. функция, которая устанавливает другую цветовую карту.
Код
% Create figure.
figure;
% Create background axes for the sky.
ax(1) = axes;
% Sky data for background.
x_bg = [0, 0, 10, 10];
y_bg = [0, 10, 10, 0];
% Fill sky with color gradient on y-axis.
fill(x_bg, y_bg, y_bg);
% Generate custom sky colormap.
sky_map = interp1([0, 1], [135, 206, 235; 255, 255, 255]./255, linspace(0, 1, 255));
% Apply sky colormap.
colormap(ax(1), sky_map);
% Create foreground axes for the terrain.
ax(2) = axes;
% Terrain data.
x = [0, 0:10, 10];
y = [0, 5*rand(size(0:10)), 0];
% Fill terrain.
fill(x, y, y);
% Sets the colormap and color axis limits based on the elevation data
% limits.
demcmap(y);
% Link x-axis and y-axis of ax(1) and ax(2).
linkaxes(ax, 'xy');
% Hide ax(1).
set(ax(1), 'Visible', 'off');
% Transparent background for ax(2).
set(ax(2), 'Color', 'none');
% Display title.
title('Vertical Profile');
% Display legend underneath.
legend('Terrain', 'Location', 'southoutside');
patch(ax(2),x,y,y)
выдает:Error using patch. Vectors must be the same length.
28.12.2016x
, иy
являются векторами 1 на 13:x = [0, 0:10, 10]; y = [0, maxHight*rand(size(0:10)), 0];
28.12.2016x
иy
совпадают, но проблема может быть не в этом. Я использую R2015a. Какую версию ты используешь? 28.12.2016