2010-03-09 32 views
41

Sử dụng ggplot2 Tôi thường sử dụng geom_text và một cái gì đó như position=jitter để chú thích các ô của tôi.Cách chú thích độc đáo một ggplot2 (thủ công)

Tuy nhiên - đối với một âm mưu hay, tôi thường thấy nó đáng giá để chú thích theo cách thủ công. như bên dưới:

data2 <- structure(list(type = structure(c(5L, 1L, 2L, 4L, 3L, 5L, 1L, 
2L, 4L, 3L, 5L, 1L, 2L, 4L, 3L, 5L, 1L, 2L, 4L, 3L), .Label = c("EDS", 
"KIU", "LAK", "MVH", "NA*"), class = "factor"), value = c(0.9, 
0.01, 0.01, 0.09, 0, 0.8, 0.05, 0, 0.15, 0, 0.41, 0.04, 0.03, 
0.52, 0, 0.23, 0.11, 0.02, 0.64, 0.01), time = c(3L, 3L, 3L, 
3L, 3L, 6L, 6L, 6L, 6L, 6L, 15L, 15L, 15L, 15L, 15L, 27L, 27L, 
27L, 27L, 27L), year = c(2008L, 2008L, 2008L, 2008L, 2008L, 2007L, 
2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 
2006L, 2006L, 2006L, 2006L, 2006L)), .Names = c("type", "value", 
"time", "year"), row.names = c(1L, 3L, 4L, 5L, 6L, 7L, 9L, 10L, 
11L, 12L, 13L, 15L, 16L, 17L, 18L, 19L, 21L, 22L, 23L, 24L), class = "data.frame") 
ggplot(data2, aes(x=time, y=value, group=type, col=type))+ 
geom_line()+ 
geom_point()+ 
theme_bw()+ 
annotate("text", x=6, y=0.9, label="this is a wrong color")+ 
annotate("text", x=15, y=0.6, label="this is a second annotation with a wrong color") 

Vấn đề là tôi không thể lấy màu chú thích văn bản cho phù hợp với màu đường kẻ. Tôi cho rằng tôi có thể sửa lỗi này với quy mô thủ công, nhưng tôi hy vọng có một cách tốt hơn?

+2

cũng thấy 'gói directlabels' – baptiste

Trả lời

46

Nếu bạn sử dụng geom_text() thay vì chú thích(), bạn có thể vượt qua một màu nhóm để âm mưu của bạn:

ggplot(data2, aes(x=time, y=value, group=type, col=type))+ 
geom_line()+ 
geom_point()+ 
theme_bw() + 
geom_text(aes(7, .9, label="correct color", color="NA*")) + 
geom_text(aes(15, .6, label="another correct color!", color="MVH")) 

Vì vậy, sử dụng chú thích() nó trông như thế này: alt text http://www.cerebralmastication.com/wp-content/uploads/2010/03/before.png

rồi sau sử dụng geom_text() nó trông giống như sau: alt text http://www.cerebralmastication.com/wp-content/uploads/2010/03/after.png

+5

Bạn có chú ý truyền thuyết ở phía bên phải? Thông thường nó phải là một vòng tròn thay vì một 'a' trên dòng. Điều này trông có vẻ không ổn. – qed

+0

Tôi cũng nhận được nhãn. Dù sao để loại bỏ điều này? – max

+2

Bạn có thể loại bỏ 'a' bằng cách thêm "show_guide = F" vào geom_text. (Câu trả lời của mbask ngăn cản việc hiển thị xấu bằng cách sao chép và nên được sử dụng thay thế. Cũng có tùy chọn show_guide nên được đặt thành F.) – bug313

57

Tôi đã gặp sự cố tương tự và đã giải quyết nó bằng câu trả lời JD Long. Nhưng kết quả là ggplot2 cập nhật lên phiên bản 0.9.0 Tôi nhận thấy rằng tất cả các cuộc gọi geom_text() được hiển thị phần nào bị mờ trên các ô.

Nhờ kohske tôi phát hiện ra rằng mã này

ggplot(data2, aes(x=time, y=value, group=type, col=type))+ 
geom_line()+ 
geom_point()+ 
theme_bw() + 
geom_text(aes(7, .9, label="correct color", color="NA*")) + 
geom_text(aes(15, .6, label="another correct color!", color="MVH")) 

lô các geom_text nrow(data2) lần!

Cách đúng để cung cấp dữ liệu để geom_text đang xây dựng một data.frame khác nhau giữ tọa độ, nhãn và màu sắc cho chuỗi bạn muốn được vẽ:

data2.labels <- data.frame(
    time = c(7, 15), 
    value = c(.9, .6), 
    label = c("correct color", "another correct color!"), 
    type = c("NA*", "MVH") 
) 

ggplot(data2, aes(x=time, y=value, group=type, col=type))+ 
    geom_line()+ 
    geom_point()+ 
    theme_bw() + 
    geom_text(data = data2.labels, aes(x = time, y = value, label = label)) 
+6

Đây là câu trả lời tốt hơn nhiều, đặc biệt là cho các tập dữ liệu lớn. Sự sao chép geom_text thực sự có thể giết chết một file PDF, làm cho nó trở nên chậm chạp. – naught101

+2

Ran vào cùng một vấn đề và điều này giải quyết nó! Sử dụng geom_text() mà không có ánh xạ dữ liệu riêng của nó sẽ dẫn đến overplotting và độ phân giải kém của văn bản. Việc cung cấp ánh xạ dữ liệu sẽ giải quyết vấn đề. – Chris

+0

Cảm ơn @kohske và @mbask. Đối với những người nhận được lỗi "Giá trị rời rạc được cung cấp cho quy mô liên tục" khi sử dụng mã ở trên. Hãy thử khi tạo khung dữ liệu của bạn để bao gồm tùy chọn 'stringsAsFactors = FALSE' – micstr

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