2012-02-21 42 views
6

Sử dụng pch Tôi có thể vẽ biểu tượng bất kỳ và gán bất kỳ nhãn nào vào chú giải. Nhưng làm thế nào tôi có thể vẽ hai biểu tượng cho mỗi nhãn chú giải? Ví dụ: trong cốt truyện bên dưới, tôi muốn có ■ ▲ ● được ghép nối với các phiên bản màu đỏ của những thứ đó vì vậy tôi chỉ có ba nhãn 'a', 'b', 'c' được hiển thị trong chú giải, cho sáu ký hiệu đó. Tại thời điểm này, có vẻ như huyền thoại âm mưu cơ bản cho phép tôi chỉ vẽ một biểu tượng cho mỗi nhãn:Hiển thị hai biểu tượng cho mỗi nhãn chú thích

plot(rnorm(50),pch=c(15:17),col=1:2) 
legend('topleft',pch=c(15:17),col=1:2,legend=c("a","b","c"),cex=1.5) 

enter image description here

+0

gì ngăn cản bạn xây dựng một huyền thoại chính mình với sự kết hợp của 'điểm()' và 'text()'? (hoặc đây có phải là giải pháp 'chấp nhận được' không?) Một ý tưởng khác là sử dụng 'ggplot2' với thang đo' rời rạc' và 'màu'. – chl

+1

@chl: Điểm đầu tiên của bạn - Tôi nghĩ rằng giải pháp mạnh mẽ/tự động hơn sẽ có thể thực hiện được. Điểm thứ hai của bạn - Tôi thành thật không thích ggplot2, bởi vì nó thêm nhiều biểu đồ theo mặc định, vì vậy tôi tránh nó. Có lẽ bạn có ý tưởng tương tự cho mạng/lưới? –

+0

Hmm. Tôi tự hỏi, nếu chủ đề ggplot2 có thể được tinh chỉnh để làm cho bạn hạnh phúc hơn. Điều gì làm bạn xem xét chartjunky khác hơn là nguồn gốc và đường lưới? Mặc dù tôi nghĩ rằng giải pháp mạng được cung cấp bởi @Josh O'Brien dưới đây sẽ phù hợp với bạn độc đáo. –

Trả lời

8

Đây không phải là quá khó với lattice, như key = đối số của nó có một số tùy ý các cột được bao gồm trong chú giải.

library(lattice) 

myPCH <- 15:17 
Data <- rnorm(50) 
Index <- seq(length(Data)) 

xyplot(Data ~ Index, 
     pch = myPCH, col=1:2, 
     key = list(space = "right", adj=1, 
        text = list(c("a", "b", "c"), cex=1.5), 
        points = list(pch = myPCH), 
        points = list(pch = myPCH,col=2))) 

Tôi không biết đầu của tôi như thế nào để bao gồm truyền thuyết bên trong khu vực vẽ đồ, nhưng với loại cốt truyện này, có vẻ tốt hơn là nên để bên ngoài. (Edit: @chl trong ý kiến ​​vui lòng chỉ ra một vài cách để làm điều này Để vẽ then chốt trong góc dưới bên trái của hình, ví dụ, thay thế space = "right" ở trên với một trong hai corner = c(0,0) hoặc x = 0, y=0.2.)

enter image description here

+0

Vâng, cảm ơn @Josh (lần nữa)!Tôi cần phải khám phá mạng lưới nhiều hơn nữa. Bạn cũng đã giải quyết vấn đề khác của tôi đang thay đổi kích thước của biểu tượng chú giải mà không thay đổi kích thước của phông chữ :-) –

+0

Ngọt ngào. Giống như bạn, vì lý do gì đó, tôi cũng thích nhìn sạch hơn về mặc định đồ họa của mạng tinh thể (mặc dù tôi chắc chắn rằng những thứ đó có thể được tinh chỉnh đủ dễ dàng). Trong lợi ích của ggplot, nó có cú pháp trực quan hơn, một fan hâm mộ lớn (và do đó hỗ trợ) cơ sở ở đây trên SO, và có vẻ là dưới sự phát triển tích cực hơn nhiều. Tôi bắt đầu nghĩ rằng tôi có thể sẽ phải chịu đựng một trong những ngày này ... –

+0

(+1) Câu trả lời hay. (btw, bạn có thể thay đổi vị trí chú giải bằng cách sử dụng 'góc' hoặc' x =, y = '; ví dụ,' khóa = danh sách (x = .1, y = .9, adj = 1, ... 'sẽ đặt chú giải bên trong khu vực âm mưu.) – chl

5

Giống như chl được chỉ ra, bạn cũng có thể tạo chú thích tùy chỉnh. Chức năng 'huyền thoại' vô hình trả về các ranh giới của hộp chú giải cũng như tọa độ của văn bản chú giải. Người ta có thể vẽ văn bản chú giải mà không có biểu tượng, và sau đó thêm các ký hiệu bằng tay với 'điểm' vào tọa độ được trả về. Điều này sẽ không cần thêm bất kỳ gói đồ họa:

plot(rnorm(50), pch=c(15:17), col=1:2) 
# Plot legend text, inset could be used to shift legend text to the right 
pos <- legend('topleft', legend=c("a","b","c"), cex=1.5) 
# Plot symbols in two columns, shifted to the left by 3 and 1 respectively 
points(x=rep(pos$text$x, times=2) - c(3,1), 
    y=rep(pos$text$y, times=2), 
    pch=rep(c(15:17), times=2), col=rep(1:2, times=3)) 

The image produced by the code

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