Xóa huyền thoại ggplot 2.2


250

Tôi đang cố gắng giữ huyền thoại của một lớp (trơn tru) và loại bỏ huyền thoại của lớp kia (điểm). Tôi đã cố gắng tắt các huyền thoại với guides(colour = FALSE)geom_point(aes(color = vs), show.legend = FALSE).

Chỉnh sửa : Vì câu hỏi này và câu trả lời của nó là phổ biến, một ví dụ có thể lặp lại dường như theo thứ tự:

library(ggplot2)
ggplot(data = mtcars, aes(x = mpg, y = disp, group = gear)) +
geom_point(aes(color = vs)) +
geom_point(aes(shape = factor(cyl))) +
geom_line(aes(linetype = factor(gear))) +
geom_smooth(aes(fill = factor(gear), color = gear)) + 
theme_bw() 

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


5
Một ví dụ tái sản xuất tối thiểu sẽ đơn giản hơn nhiều. Trong dòng mã dài dường như có rất nhiều mã không cần thiết (đối với vấn đề hiện tại) cũng như nó hoàn toàn không thể sử dụng được như hiện tại nó được viết.
mnel

Câu trả lời:


445

từ r cookbook , trong đó bp là ggplot của bạn:

Xóa chú thích cho một thẩm mỹ cụ thể (điền):

bp + guides(fill=FALSE)

Nó cũng có thể được thực hiện khi chỉ định thang đo:

bp + scale_fill_discrete(guide=FALSE)

Điều này loại bỏ tất cả các truyền thuyết:

bp + theme(legend.position="none")

25
Là một câu trả lời cho một nhận xét của @Alex: Lưu ý rằng theme_bw()có thể can thiệp vào bất kỳ định nghĩa nào được thực hiện bằng cách sử dụng theme(). Khi sử dụng theme_bw(), đảm bảo thêm nó vào cốt truyện trước khi bạn thay đổi bất kỳ tùy chọn chủ đề nào khác.
fabern

1
Nhưng khi tôi làm một cái gì đó như thế này bp + theme(legend.position="none") + theme_classic(), các huyền thoại trở lại. Vậy làm thế nào để loại bỏ nó?
tình yêu

3
@loveR đặt theme_groupic lên hàng đầu:bp + theme_classic() + theme(legend.position="none")
giả thuyết

1
Điều này không ảnh hưởng đến cốt truyện của tôi. Tôi đã sử dụng phương pháp của @Tjebo thành công.
James Hirschorn

80

Có thể có một giải pháp khác cho vấn đề này:
Mã của bạn là:

geom_point(aes(..., show.legend = FALSE))

Bạn có thể chỉ định các show.legendtham số sau khi các aescuộc gọi:

geom_point(aes(...), show.legend = FALSE)

thì huyền thoại tương ứng sẽ biến mất


3
Đây là một cách tiếp cận rất tốt đẹp. Trực quan hơn là tốt.
patL

2
Đây là giải pháp hoạt động để loại bỏ các chữ cái trong truyền thuyết khi tôi sử dụng geom lòng để chú thích các dòng màu. Không có scale_labellệnh (điều này cũng không có ý nghĩa), và guide(label = FALSE)cũng không hoạt động. Cảm ơn!
Melissa Key

45

Vì câu hỏi và câu trả lời của người dùng3490026 là một mục tiêu tìm kiếm hàng đầu, tôi đã đưa ra một ví dụ có thể lặp lại và một minh họa ngắn gọn về các đề xuất được đưa ra cho đến nay, cùng với một giải pháp giải quyết rõ ràng câu hỏi của OP.

Một trong những điều ggplot2làm và có thể gây nhầm lẫn là nó tự động pha trộn một số truyền thuyết nhất định khi chúng được liên kết với cùng một biến. Chẳng hạn, factor(gear)xuất hiện hai lần, một lần cho linetypevà một lần cho fill, dẫn đến một huyền thoại kết hợp. Ngược lại, gearcó mục huyền thoại riêng của nó vì nó không được coi là giống như factor(gear). Các giải pháp được cung cấp cho đến nay thường hoạt động tốt. Nhưng đôi khi, bạn có thể cần ghi đè các hướng dẫn. Xem ví dụ cuối cùng của tôi ở phía dưới.

# reproducible example:
library(ggplot2)
p <- ggplot(data = mtcars, aes(x = mpg, y = disp, group = gear)) +
geom_point(aes(color = vs)) +
geom_point(aes(shape = factor(cyl))) +
geom_line(aes(linetype = factor(gear))) +
geom_smooth(aes(fill = factor(gear), color = gear)) + 
theme_bw() 

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

Xóa tất cả các huyền thoại: @ user3490026

p + theme(legend.position = "none")

Xóa tất cả các huyền thoại: @duhaime

p + guides(fill = FALSE, color = FALSE, linetype = FALSE, shape = FALSE)

Tắt truyền thuyết: @Tjebo

ggplot(data = mtcars, aes(x = mpg, y = disp, group = gear)) +
geom_point(aes(color = vs), show.legend = FALSE) +
geom_point(aes(shape = factor(cyl)), show.legend = FALSE) +
geom_line(aes(linetype = factor(gear)), show.legend = FALSE) +
geom_smooth(aes(fill = factor(gear), color = gear), show.legend = FALSE) + 
theme_bw() 

Xóa điền để linetype hiển thị

p + guides(fill = FALSE)

Tương tự như trên thông qua hàm scale_fill_:

p + scale_fill_discrete(guide = FALSE)

Và bây giờ một câu trả lời có thể cho yêu cầu của OP

"để giữ huyền thoại của một lớp (trơn tru) và loại bỏ huyền thoại của lớp kia (điểm)"

Bật một số tắt một số quảng cáo hậu hoc

p + guides(fill = guide_legend(override.aes = list(color = NA)), 
           color = FALSE, 
           shape = FALSE)  

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


2
Chỉ cần chú ý màu tô màu xanh trong ô cuối cùng không xuất hiện trên biểu đồ, không hiểu tại sao ...
PatrickT

Nhập warnings()sau khi bạn chạy mã của mình và bạn sẽ thấy (các) lý do cho dải băng màu xanh không hiển thị.
markus

@markus: Cảm ơn! Tôi sẽ không bận tâm để chỉnh sửa ví dụ, vì vấn đề là riêng biệt. Tuy nhiên, thật vô nghĩa khi có một huyền thoại sekhi nó không được tính toán. Có lẽ đáng giá một vấn đề tại github, nhưng tôi không có năng lượng ngay bây giờ ...
PatrickT

13

Nếu biểu đồ của bạn sử dụng cả hai fillcolortính thẩm mỹ, bạn có thể xóa chú thích bằng:

+ guides(fill=FALSE, color=FALSE)
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.