2012-03-02 57 views
8

Tôi muốn chia chú giải thành một ô thành 2, sao cho 3 phần tử đầu tiên được tách biệt với phần tử thứ 4 bằng khoảng cách khoảng 1 chiều cao. Ban đầu tôi chỉ cố gắng để thêm một dòng-break trước phần tử 1:Huyền thoại trong các ô R

legend("topright",col=1,lty=1:3,lwd=1,legend=c("leg1","leg2","\nleg3"), bty="n") 

nhưng điều này dường như để tăng khoảng cách Inbetween tất cả các yếu tố (là hành vi tài liệu này?)

sau đó tôi sử dụng 2 truyền thuyết riêng biệt, thiết lập các biên giới để "n" và sử dụng lines() để xây dựng lại các biên giới (tình cờ, là có một cách để ngăn chặn chỉ có 1 biên giới của một huyền thoại?); mặc dù công trình này, nó đòi hỏi rất nhiều thử và sai với các giá trị của inset.

Các giá trị mặc định của inset trong legend()c(0,0), nhưng những rõ ràng được điều chỉnh trong các cuộc gọi ban đầu để legend(), dựa vào độ dài của văn bản trong các yếu tố của huyền thoại đó. Theo số ?legend, giá trị của cuộc gọi legend() bao gồm các số

"số vectơ có độ dài dài (chú giải), cho toạ độ x và y của (các) văn bản của chú giải".

Có cách nào điều này có thể được chuyển đổi thành các giá trị phù hợp cho số gọi inset của 2 để các thành phần của cả hai truyền thuyết xếp hàng?

Trả lời

22

chỉ định NA trong đối số nơi bạn muốn không gian. Bạn sẽ cần phải cung cấp cho tất cả các đối số truyền thuyết như vectơ.

set.seed(2) 
    plot(0:10, rnorm(11), col = sample(c("green", "blue"), 11, replace = TRUE), 
     pch = sample(c(3, 19), 11, replace = TRUE), xlim = c(0, 12)) 
    legend("topright", pch = c(3, 19, NA, 3, 19), 
     col = c("green", "green", NA, "blue", "blue"), 
     legend = c("green cross", "green dot", NA, "blue cross", "blue dot")) 

enter image description here

Ngoài ra, nếu bạn muốn thực hiện 2 cuộc gọi đến legend() để kiểm soát tốt hơn, xác định trace=TRUE trong các đối số và nó sẽ trả về cho bạn những x và y tọa độ mà bạn cần.

+0

Cảm ơn, dễ dàng hơn nhiều so với tôi đã tạo ra nó! – ChrisW

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