2012-07-30 47 views
61

Tôi có một khung dữ liệu đơn giản mà tôi đang cố gắng thực hiện một đường kết hợp và điểm lô bằng ggplot2. Giả sử dữ liệu của tôi trông như thế này:Xóa các chú thích thừa trong ggplot2

df <- data.frame(x=rep(1:10,2), y=c(1:10,11:20), 
       group=c(rep("a",10),rep("b",10))) 

Và tôi đang cố gắng để thực hiện một âm mưu:

g <- ggplot(df, aes(x=x, y=y, group=group)) 
g <- g + geom_line(aes(colour=group)) 
g <- g + geom_point(aes(colour=group, alpha = .8)) 
g 

Kết quả có vẻ tốt đẹp với một ngoại lệ. Nó có thêm một chú thích cho thấy alpha cho lớp geom_point của tôi.

Extra Legend for geom_point transparency

Làm thế nào tôi có thể giữ các huyền thoại thể hiện màu sắc nhóm, nhưng không phải là người mà hiển thị cài đặt alpha của tôi?

Trả lời

123

Thẩm mỹ có thể là đặt hoặc ánh xạ trong một cuộc gọi ggplot.

  • Một thẩm mỹ được định nghĩa trong aes(...)ánh xạ từ các dữ liệu, và một huyền thoại được tạo ra.
  • Thẩm mỹ cũng có thể là đặt thành một giá trị bằng cách xác định nó bên ngoài aes().

Trong trường hợp này, nó xuất hiện bạn muốn thiếtalpha = 0.8đồcolour = group.

Để làm điều này,

Đặt alpha = 0.8 bên ngoài định nghĩa aes().

g <- ggplot(df, aes(x = x, y = y, group = group)) 
g <- g + geom_line(aes(colour = group)) 
g <- g + geom_point(aes(colour = group), alpha = 0.8) 
g 

enter image description here

Đối với bất kỳ ánh xạ biến bạn có thể đàn áp sự xuất hiện của một huyền thoại bằng cách sử dụng guide = 'none' trong scale_... gọi thích hợp. ví dụ.

g2 <- ggplot(df, aes(x = x, y = y, group = group)) + 
     geom_line(aes(colour = group)) + 
     geom_point(aes(colour = group, alpha = 0.8)) 
g2 + scale_alpha(guide = 'none') 

Mà sẽ trả về một cốt truyện giống hệt

EDIT @ bình luận Joran là chỗ-on, tôi đã thực hiện câu trả lời của tôi toàn diện hơn

+12

Đây là phương pháp chính xác, vì OP được thiết lập thay vì lập bản đồ thẩm mỹ, nhưng nói chung bạn có thể ngăn chặn sự xuất hiện của bất kỳ chú thích nào bằng 'g + scale_alpha (guide =" none ")'. – joran

+0

Thật vậy. Câu trả lời đã được xây dựng dựa trên. Nó có ý nghĩa hơn để có một câu trả lời toàn diện, không chỉ cụ thể cho vấn đề OP. – mnel

+4

Cảm ơn rất nhiều vì đã giải thích thêm. Điều này đi một chặng đường dài để giúp tôi hiểu triết lý của ggplot. – Wilduck

0

Đối với các phiên bản cũ của ggplot2 (phiên bản trước 0,9 .2, phát hành vào cuối năm 2012), câu trả lời này sẽ hoạt động:

Tôi đã thử điều này với colour_scale và nó không hoạt động. Có vẻ như mục colour_scale_hue hoạt động như một hàm có tham số mặc định TRUE. Tôi đã thêm scale_colour_hue(legend=FALSE) và nó hoạt động.

Tôi không chắc chắn nếu điều này là trường hợp cho tất cả các mặt hàng quy mô màu trong ggplot

+3

Sử dụng 'legend' trong một cuộc gọi' scale_ * 'không được chấp nhận, tốt hơn là thực hiện' scale_colour_hue (guide = "none") '. – Gregor

+2

xem xét rằng 'legend = FALSE' không được chấp nhận, như được chỉ ra bởi nhận xét @shujaa, đây là câu trả lời trùng lặp có hiệu quả, tức là thêm' guide = "none" 'vào hàm' scale_fill/color * '. –

13

Chỉ cần thêm mã show.legend = F sau phần mà bạn không muốn nó.

g <- ggplot(df, aes(x=x, y=y, group=group)) 
g <- g + geom_line(aes(colour=group)) 
g <- g + geom_point(aes(colour=group, alpha = .8), show.legend = F) 
Các vấn đề liên quan