Xóa các chú giải bổ sung trong ggplot2


91

Tôi có một khung dữ liệu đơn giản mà tôi đang cố gắng sử dụng biểu đồ đường và điểm kết hợp ggplot2. Giả sử dữ liệu của tôi trông giống như sau:

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ẻ ổn với một ngoại lệ. Nó có thêm một chú giải hiển thị alphacho geom_pointlớp của tôi .

Chú giải bổ sung cho độ trong suốt của <code> geom_point </code>

Làm cách nào để giữ chú giải hiển thị màu nhóm, nhưng không hiển thị chú giải hiển thị cài đặt alpha của tôi?

Câu trả lời:


172

Tính thẩm mỹ có thể được thiết lập hoặc ánh xạ trong một ggplotcuộc gọi.

  • Một thẩm mỹ được xác định bên trong aes(...)được ánh xạ từ dữ liệu và một chú giải được tạo.
  • Một thẩm mỹ cũng có thể được đặt thành một giá trị duy nhất, bằng cách xác định nó bên ngoài aes().

Trong trường hợp này, có vẻ như bạn muốn thiết lập alpha = 0.8lập bản đồ colour = group .

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

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

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

nhập mô tả hình ảnh ở đây

Đối với bất kỳ biến được ánh xạ nào, bạn có thể nhấn mạnh sự xuất hiện của chú giải bằng cách sử dụng guide = 'none'trong lệnh 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')

Cái nào sẽ trả về một cốt truyện giống hệt nhau

CHỈNH SỬA nhận xét của @ Joran là đúng, tôi đã làm cho câu trả lời của mình toàn diện hơn


18
Đây là phương pháp chính xác, vì OP đang thiết lập chứ không phải ánh xạ 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ỳ huyền thoại nào bằng cách sử dụng một cái gì đó như g + scale_alpha(guide = "none").
joran

Thật. Câu trả lời đã được giải thích. Sẽ có ý nghĩa hơn khi 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 cho lời giải thích bổ sung. Điều này giúp tôi hiểu được triết lý của ggplot.
Wilduck,

2
Tôi đã sử dụng ggplot hơn một năm và tôi KHÔNG BAO GIỜ hiểu được sự khác biệt giữa biến được ánh xạ hoặc tập hợp. Đây là câu trả lời SO hay nhất mà tôi từng thấy, xin chúc mừng.
Amit Kohli

1
@theforestecologist Đó là bởi vì groupthẩm mỹ không tự tạo ra bất kỳ quy mô hoặc hướng dẫn nào. Nó luôn luôn sửa đổi một cái gì đó khác. Bạn sẽ không bao giờ có được một huyền thoại cho thẩm mỹ "nhóm".
joran

41

Chỉ cần thêm show.legend = Fmã sau phần mà bạn không muố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)

1
Đây là trực quan hơn nhiều so với bản đồ vs thẩm mỹ thiết lập (mặc dù Clears đó lên rất nhiều hiểu lầm quá)
Wassadamo

1

Đối với các phiên bản cũ của ggplot2 (các phiên bản trước 0.9.2, được 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 a colour_scalevà nó không hoạt động. Có vẻ như colour_scale_huemục hoạt động giống như một hàm với một 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 đây có phải là trường hợp của tất cả các mục thang màu trong ggplot hay không


3
Việc sử dụng legendtrong scale_*cuộc gọi không được dùng nữa, tốt hơn hết là bạn nên làm scale_colour_hue(guide = "none").
Gregor Thomas

3
Lưu ý rằng legend=FALSEcâu trả lời không được dùng nữa, như được chỉ ra bởi @shujaa bình luận, đây thực sự là một câu trả lời trùng lặp, tức là để thêm guide = "none"vào một scale_fill/color*hàm.
David LeBauer
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.