2012-08-01 40 views
5

Tôi có một câu hỏi liên quan đến đồ thị dưới đây:Matlab: Lắp lô khác nhau

enter image description here Về cơ bản, chúng tôi đã ở đây hai subplots có cùng trục x. Tôi muốn để tiết kiệm không gian ngay bây giờ, và thay vì có 2 điểm con với hai nhãn x-axix, tôi sẽ thích tách biệt không gian giữa chúng và xếp chồng lên nhau.

Có cách nào dễ dàng để làm điều đó không?

Rất cám ơn! Patrick

%% Data 
t = 0:100; 
f1 = 0.3; 
f2 = 0.07; 
u1 = sin(f1*t); cu1 = 'r'; %red 
u2 = cos(f2*t); cu2 = 'b'; %blue 
v1 = 5*u1.^2;  cv1 = 'm'; %magenta 
v2 = 5*u2.^2;  cv2 = 'c'; %cyan 

figure; 
h(1) = subplot(2,1,1); % upper plot 
plot(t,u1,'Color',cu1,'DisplayName','u1'); hold on; 
plot(t,u2,'Color',cu2,'DisplayName','u2'); hold off; 

xlabel('Time t [s]'); 
ylabel('u [some unit]'); 
legend(gca,'show'); 

h(2) = subplot(2,1,2); % lower plot 
plot(t,v1,'Color',cv1,'DisplayName','v1'); hold on; 
plot(t,v2,'Color',cv2,'DisplayName','v2'); hold off; 

xlabel('Time t [s]'); 
ylabel('v [some unit^2]'); 
legend('show'); 

linkaxes(h,'x'); % link the axes in x direction (just for convenience) 

Trả lời

11

Tháo xticks của cốt truyện trên:

set(h(1),'xticklabel',[]); 

và cũng loại bỏ các xlabel (xóa hoặc nhận xét rằng dòng trong mã của bạn)

Bây giờ di chuyển hai xích lại gần nhau bởi thay đổi vị trí của họ:

pos=get(h,'position'); 
bottom=pos{2}(2); 
top=pos{1}(2)+pos{1}(4); 
plotspace=top-bottom; 
pos{2}(4)=plotspace/2; 
pos{1}(4)=plotspace/2; 
pos{1}(2)=bottom+plotspace/2; 

set(h(1),'position',pos{1}); 
set(h(2),'position',pos{2}); 

thì bạn sẽ nhận được

enter image description here

Các nhãn trục y đang bắt đầu chồng lên nhau, vì vậy bạn cũng có thể muốn điều chỉnh này với

set(h(1),'ytick',[-0.5 0 0.5]); 

ví dụ, hoặc đặt một trục y ở phía bên phải với:

set(h(2),'YAxisLocation','right') 
+1

Thay vì mã hóa cứng vị trí trục, bạn có thể thử tight_layout (http://matplotlib.sourceforge.net/users/tight_layout_guide.html). Nó sẽ sắp xếp lại trục sao cho các nhãn không trùng lặp. – imsc

Các vấn đề liên quan