Как повторить те же значения по оси X фигур Matlab? - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть две функции, у которых их 'x' находятся в диапазоне от 1 до 30 (1 <= x <= 30), и у каждой из них есть свое собственное "y".Я хочу построить их на одной диаграмме и нарисовать вертикальную линию между ними (разделить их): </p>

1<=x<=30 for function 1
x=31 separator
32<=x<=61 for function 2

Это код:

y1=[6.5107   28.1239   15.0160   24.9586   17.6224   12.7936   21.9143    7.7560   27.4761    3.1279    8.3063   17.4207 8.3265    0.7540   13.2846   22.8183   25.7289   13.5553   18.0556   19.1853   20.2442    9.0290    5.3196    2.5757 21.6273    8.9054    2.0535    5.0569   22.7735   14.7483];
y2=[13.5876    5.7935    6.4742         0    7.7878         0    8.6912    0.4459   11.9369   10.4926    9.2844   10.4645 4.0736    9.0897    8.4051    0.7690   15.9073    3.7413    8.5098    9.7112    1.3231    8.5113    8.7681    4.1696 12.9530    0.6313   19.9750    0.0664    9.9677   10.1181];
%function 1
bar(1:30,y1,'r');
hold on
% a vertical line from x=31
plot([31 31],get(gca,'ylim'))
%function 2
bar(32:61,y2,'b');

Но когда я строю их,ось x функции 1 (левая функция) на нашей диаграмме равна 1:30, а ось x функции 2 (правая функция) на нашей диаграмме - 32:61.Но я хочу показать значения по оси X для них обоих как 1:30, а не как 1:30, а другое как 32:61.(См вложение).Как я могу это сделать?enter image description here

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Этот ответ принципиально не отличается от второй части предыдущего ответа , но предлагает некоторые улучшенные техники для «косметики»:

sp(1) = subplot(1,2,1);
bar(1:30,y1,'r');
sp(2) = subplot(1,2,2);
bar(1:30,y2,'b');
% set both y-axis to the same limits:
linkaxes(sp,'xy')
xlim([0 31])
sp(2).YTickLabel = [];
% tight the 2 subplots:
space = sp(2).Position(1)-sp(1).Position(1)-sp(1).Position(3);
sp(1).Position(3) = sp(1).Position(3)+0.5*space;
sp(2).Position(3) = sp(2).Position(3)+0.5*space;
sp(2).Position(1) = sp(2).Position(1)-0.5*space;
% create legend for both plots
legend([sp.Children],{'Function 1','Function 2'})

enter image description here

0 голосов
/ 30 ноября 2018

Я предлагаю добавить две строки кода.Вы можете изменить начальное значение и размер шага, чтобы получить желаемую эстетику, используя set, gca и xlim.

set(gca,'XTick',[0 2:2:61],'XTickLabel',[0 2:2:30 2:2:30])
xlim([0 62])

Example demonstrating repeated x values on x tick labels

Другие подходы могут быть более эффективными, но, надеюсь, это позволит вам продолжать двигаться вперед.

Как уже указывалось в комментариях, subplot тоже может хорошо работать.

Subplot Example

figure
s(1) = subplot(1,2,1)
b1 = bar(1:30,y1,'r');
s(2) = subplot(1,2,2)
b2 = bar(1:30,y2,'b');
title(s(1),'Function 1')
title(s(2),'Function 2')

% Cosmetics
xRng = [0 31];
yRng = [0 max(max(s(1).YLim),max(s(2).YLim))];
for k = 1:2
xlim(s(k),xRng)
s(k).YLim = yRng;   % Ensure both vertical axes are same (for fair comparison)
s(k).YGrid = 'on';
end

Протестировано с MATLAB R2017a

...