2016-07-25 19 views
7

Hãy xem xét đoạn mã sau:Làm cách nào để thêm chú thích 2 cột vào một âm mưu Matlab?

t=0:.01:(2*pi); 
y=[sin(t);sin(t-pi/12);sin(t-pi/6);sin(t-pi/4)]; 
figure(1) 
    clf 
    subplot(6,1,5) 
    plot(t,y) 
    xlim([0 2*pi]) 
    legend('1','2','3','4') 

nó tạo ra hình sau:

![enter image description here

Có cách nào để thay đổi các huyền thoại để 2 cột lay-out? Vì vậy, nó sẽ là

--- 1 --- 3

--- 2 --- 4

thay vì

--- 1

--- 2

--- 3

--- 4

nên ranh giới huyền thoại lót sẽ không vượt qua đường ranh giới đồ thị.

Tôi đã tìm thấy tập lệnh gridLegend nhưng tôi muốn mã trực tiếp.

+4

Không chắc chắn nếu bạn có thể với các phương pháp chính thống nhưng câu hỏi thực sự thú vị. Có lẽ ai đó có thể hack vào java và làm điều đó. Có lẽ 'gridLegend' là tốt nhất –

+1

Nếu bạn muốn mã nó trực tiếp thì hãy làm theo cùng với những gì' gridLegend' đang làm và thực hiện nó cho mình. – excaza

+0

@excaza Vâng, đó cũng là ý tưởng đầu tiên của tôi. Nhưng có vẻ như không dễ như thêm 1 hoặc 2 dòng mã vào câu lệnh 'legend'. – Karlo

Trả lời

1

Bạn thường có thể hack các loại điều này bằng cách tạo ra một trục tàng hình thứ hai trên đỉnh đầu tiên, như thế này:

t=0:.01:(2*pi); 
y=[sin(t);sin(t-pi/12);sin(t-pi/6);sin(t-pi/4)]; 
figure 
subplot(6,1,5) 

plot(t,y) 
xlim([0 2*pi]) 
l1 = legend('1', '2'); 
pos = l1.Position; 
set(l1, 'Position', pos - [pos(3) 0 0 0]); 
legend boxoff 

ax2 = copyobj(gca, gcf); 
set(ax2, 'visible', 'off', 'clipping', 'off') 
kids = ax2.Children; 
set(kids, 'visible', 'off', 'clipping', 'off') 
set(ax2, 'children', kids([3:4 1:2])) 
l2 = legend(ax2, '3', '4'); 
legend(ax2, 'boxoff') 
legend boxoff 

Lưu ý rằng đây là mong manh (ví dụ, không xử lý các cửa sổ được thay đổi kích cỡ trên phiên bản MATLAB của tôi).

+0

Hack thú vị. Thực sự có thể được cải thiện để hai truyền thuyết có cùng chiều cao cho mỗi kích thước cửa sổ hình. – Karlo

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