2014-10-20 3 views
0

Я хотел бы построить два графика с одной и той же осью x, но с разными y-осями, один сложенными над другим. Аналогичный вопрос задан ниже, но он не учитывает изменения размеров в осях y. Я отредактировал этот код для этого, но надеюсь, что будет более элегантный подход (возможно, с использованием кода типа «hold on»).Как увеличить два участка Matlab?

How to plot graphs above each other in Matlab?

ответ

1

Вот код, который может делать то, что вы хотите ... если я понял правильно. В основном вы создаете две разные оси на одном и том же рисунке, один поверх другого, и вы играете с XTick и YTick. Вы можете начать с этого я догадываюсь .:

clear 
close all 
clc 

x = 1:10; 

y1 = -(x.^2); 
y2 = sin(x); 

figure('Units','Normalized'); 

hAxes1 = axes('Position',[0.1 0.1 .8 .4]); 

yLim = get(hAxes1,'YLim'); 
Axes1Position = get(hAxes1,'Position'); 

NewAxesPosition = [Axes1Position(1) Axes1Position(2)+0.4 Axes1Position(3) Axes1Position(4)]; 

hAxes2 = axes('Position',NewAxesPosition); 

plot(x,y1,'b','Parent',hAxes1); 

TICK = get(hAxes1,'YTick') 

set(hAxes1,'XTick',2:1:10,'YTick',TICK(1:end-1)) 

hold on 

plot(x,y2,'r','parent',hAxes2) 
set(gca,'XTick',[],'XTickLabel',[]) 

hold off 

Давать это:

enter image description here

Это не является оптимальным, но из-за нехватки времени я должен остановиться здесь :) Конечно, вы можете изменить отображение оси или отметки по вашему желанию. Кроме того, вы можете использовать текстовые аннотации, чтобы настроить YTicks еще красивее. Надеюсь, что это поможет!

+0

Это, безусловно, соответствует тому, что я ищу. Это похоже на вышеупомянутое связанное решение, но, насколько я могу судить, более кратким. Я удивляюсь, что у MATLAB нет какой-то функции или чего-то в этом роде. Увы, я буду нажимать. Большое спасибо за вашу помощь! – josh

1

Пример:

A = 1000; 
a = 0.005; 
b = 0.005; 

t = 0:900; 
z1 = A*exp(-a*t); 
z2 = sin(b*t); 

[ax,p1,p2] = plotyy(t,z1,t,z2,'semilogy','plot'); 

ylabel(ax(1),'Semilog Plot') % label left y-axis 
ylabel(ax(2),'Linear Plot') % label right y-axis 
xlabel(ax(2),'Time') % label x-axis 

Со ссылкой на: http://www.mathworks.com/help/matlab/creating_plots/plotting-with-two-y-axes.html

+0

Я думал, что получу это как ответ, но не знал, чтобы объяснить, что это не то, что я искал. Я хочу что-то, что помещает новую ось y ниже первой. (Настолько эффектно запечатлевать на одном и том же графике и сдвигаться вниз, но более элегантно). Однако, спасибо. – josh

+0

Да, полностью согласен с тобой. Рад, что это помогло! –

Смежные вопросы