2017-12-18 19 views
1

"How to insert two X axis in a Matlab plot"질문에 대한 해결책을 따라 두 개의 x 축이 하나씩있는 그래프를 만들었습니다.두 개의 스택 된 x 축 사이의 수직선

이제 x 값의 두 x 축 사이에 수직선을 만들려고합니다. 예를 들어 링크 된 질문에있는 것과 같은 인물이 있다고 가정 해 봅시다. 두 x 축 사이에 x = 2 m/s 값으로 세로선을 그 으려면 어떻게해야합니까?

Here is an image of what I am looking for. The red line is what I am trying to draw in MATLAB. The two x-axes both have the same scale.

+0

당신이 더 자세한 될 수 있을까? 예를 들어 x 축의 축척이 다릅니다. 당신도 같은 크기로 조정 되었습니까? 당신이 원하는 것을 보여 주기만하면 되겠습니까? (그림판에서이 선을 그리십시오) – zlon

+0

이것은 Matlab이 여전히 올바른 도구인지 여부에 대해 실제로 생각해야하는 지점입니다. Inkscape, Illustrator, tikz & co는 많은 시간을 절약 해줍니다. – thewaywewalk

+0

매우 큰 데이터 세트와 많은 그래프에 대해 x 축의 특정 지점에이 선을 작성하려고합니다. MATLAB에서 불가능하다고 생각되면 다른 프로그램을 살펴 보겠습니다. 그러나 먼저 MATLAB에서 가능한 방법이 있는지 알고 싶었습니다. –

답변

0

이 행할 수 있지만, 까다 롭습니다. annotation을 사용했지만 그림 단위에서 축 단위로 매핑해야합니다. 여기 간다 :

% experimental data 
M(:,1) = [ 0, 1, 2, 3, 4, 5]; 
M(:,3) = [12, 10, 15, 12, 11, 13]; 

% get bounds 
xmaxa = max(M(:,1))*3.6; % km/h 
xmaxb = max(M(:,1));  % m/s 

figure; 

% axis for m/s 
b=axes('Position',[.1 .1 .8 eps]); 
set(b,'Units','normalized'); 
set(b,'Color','none'); 

% axis for km/h with stem-plot 
a=axes('Position',[.1 .2 .8 .7]); 
set(a,'Units','normalized'); 
stem(a,M(:,1).*3.6, M(:,3)); 

% set limits and labels 
set(a,'xlim',[0 xmaxa]); 
set(b,'xlim',[0 xmaxb]); 
xlabel(a,'Speed (km/h)') 
xlabel(b,'Speed (m/s)') 
ylabel(a,'Samples'); 
title(a,'Double x-axis plot'); 

% this where the trick happens 
pos = get(b, 'Position') ; 
x_normalized = @(x0) (x0 - min(b.XLim))/diff(b.XLim) * pos(3) + pos(1); 
xl = [x_normalized(2) x_normalized(2)]; % because you wanted x=2 m/s 
yl = [0.1 0.2]; 
annotation('line',xl,yl,'Color',[1 0 0]) 

enter image description here