2015-03-15 9 views
5

Tôi đang tạo nhiều lô dữ liệu khác nhau liên tiếp bằng MATLAB. Tôi muốn các vị trí huyền thoại được như vậy mà họ không chồng lên nhau trên các đường vẽ và nó sẽ là lý tưởng nếu vị trí này có thể được thực hiện tự động.Đặt truyền thuyết MATLAB sao cho nó không trùng lặp trên ô

Tôi biết đặt 'Location' thành 'best' để đạt được điều này nhưng vị trí của chú giải có xu hướng khó xử khi sử dụng 'best' (bên dưới). Ngoài ra, tôi muốn truyền thuyết ở bên trong cốt truyện. Tôi cũng đã đi qua một cách để làm cho huyền thoại minh bạch (here) để nó không làm cho dữ liệu được vẽ vô hình, nhưng một cách rõ ràng đặt huyền thoại ở nơi khác là những gì tôi đang tìm kiếm. The awkwardly placed legend

Có cách nào để đặt các huyền thoại ở những thái cực của hình ảnh ('NorthWest', 'SouthWest' vv) tự động như vậy mà nó không chồng chéo lên nhau trên các dữ liệu âm mưu (ngoài từ các phương pháp gợi ý ở trên)?

+1

lẽ bạn có thể dùng lệnh 'tài sản thay vì' Location' Position'? Điều này sẽ yêu cầu một số chỉnh nhỏ. Những gì bạn có thể làm là tạo một danh sách, nói rằng, 4-6 vị trí mà bạn nghĩ rằng vị trí là OK, và sau đó kiểm tra dữ liệu của bạn cho các vị trí này. Ví dụ, trong cốt truyện đã cho, nó không quá khó để tính toán cho 5 x giá trị đầu tiên phạm vi thấp hơn của cốt truyện của bạn có sẵn, và do đó sẽ là một nơi thích hợp để đặt chú giải. –

+1

Không thể thử điều này ngay bây giờ - nhưng nếu bạn sử dụng 'tốt nhất', hãy xác định vị trí của chú giải (tôi chắc chắn đó là thuộc tính bạn có thể đọc), tìm ra góc gần nhất sau đó trượt nó qua đâu? Nên có thể làm cho rằng một chức năng nhỏ mà bạn gọi với các trục mong muốn làm đối số. – Floris

Trả lời

0

Vì vậy, bạn đã thử sử dụng Location thay vì Position? Ví dụ:

x =1:100; 
y = x.^2; 
lgd = legend('y = x.^2'); 
set(lgd,'Location','best') 

và bạn đang nhận được kết quả kỳ lạ đúng? Một cách nhanh chóng giải quyết này sẽ vẫn sử dụng Location, với best, và trích xuất các tọa độ:

lgd.Position 

Bạn sẽ nhận được một cái gì đó như thế này:

ans = 

    0.7734 0.3037 0.1082 0.0200 

mà bản đồ để:

[left bottom width height] 

Bạn sẽ cần phải tập trung vào bên trái và dưới cùng. Hai giá trị này, trái và dưới, xác định khoảng cách từ góc dưới bên trái của hình đến góc dưới bên trái của chú giải, và chúng tương tự với khung lưới bạn đang sử dụng.

Sau đó, tùy thuộc vào kích thước của khung (tôi sẽ đề nghị bạn sử dụng axis([XMIN XMAX YMIN YMAX]) cho điều này, nếu có thể), bạn có thể xác định vị trí của các huyền thoại trong lưới. Những gì bạn có thể làm tiếp theo là kiểm tra xem biểu đồ của bạn có trong đường chéo hay không với chú giải (có thể xác định hàm khoảng cách tương đối dựa trên ngưỡng khoảng cách) và nếu chúng thực hiện, thì đặt lại vị trí huyền thoại một cách ngẫu nhiên (tức là thay đổi giá trị) của leftbottom) và lặp lại cho đến khi các điều kiện của bạn được đáp ứng.

Nếu điều này vẫn còn rắc rối, bạn có thể viết một đoạn mã ngắn. Cuối cùng, hãy biết rằng bạn luôn có thể chọn để đặt các huyền thoại ở bên ngoài:

set(lgd,'Location','BestOutside') 
Các vấn đề liên quan