Hapus legenda ggplot 2.2


250

Saya mencoba untuk menjaga legenda satu lapisan (halus) dan menghapus legenda yang lain (titik). Saya telah mencoba mematikan legenda dengan guides(colour = FALSE)dan geom_point(aes(color = vs), show.legend = FALSE).

Sunting : Karena pertanyaan ini dan jawabannya populer, contoh yang direproduksi tampaknya berurutan:

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() 

masukkan deskripsi gambar di sini


5
Contoh yang direproduksi minimal akan jauh lebih sederhana. Pada baris kode yang panjang tampaknya ada banyak kode yang tidak perlu (untuk masalah yang ada) dan juga sama sekali tidak dapat diproduksi kembali seperti saat ini ditulis.
mnel

Jawaban:


445

dari r cookbook , di mana bp adalah ggplot Anda:

Hapus legenda untuk estetika tertentu (isi):

bp + guides(fill=FALSE)

Ini juga dapat dilakukan saat menentukan skala:

bp + scale_fill_discrete(guide=FALSE)

Ini menghapus semua legenda:

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

25
Sebagai balasan untuk komentar oleh @Alex: Catatan yang theme_bw()dapat mengganggu definisi apa pun yang dilakukan theme(). Saat menggunakan theme_bw(), pastikan untuk menambahkannya ke plot sebelum Anda mengubah opsi tema lainnya.
fabern

1
tetapi ketika saya melakukan sesuatu seperti ini bp + theme(legend.position="none") + theme_classic(), legenda kembali. Jadi bagaimana cara menghapusnya?
loveR

3
@loveR menempatkan theme_classic pertama:bp + theme_classic() + theme(legend.position="none")
hipotesis

1
Ini tidak berpengaruh pada plot saya. Saya menggunakan pendekatan @Tjebo dengan sukses.
James Hirschorn

80

Mungkin ada solusi lain untuk ini:
Kode Anda adalah:

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

Anda dapat menentukan show.legendparameter setelah itu aespanggilan:

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

maka legenda yang sesuai akan hilang


3
Ini adalah pendekatan yang sangat bagus. Lebih intuitif juga.
pat

2
Ini adalah solusi yang berfungsi untuk menghapus surat dari legenda ketika saya menggunakan geom_text untuk membubuhi keterangan garis warna. Tidak ada scale_labelperintah (juga tidak masuk akal), dan guide(label = FALSE)juga tidak berhasil. Terima kasih!
Melissa Key

45

Karena pertanyaan dan jawaban user3490026 adalah hit pencarian teratas, saya telah membuat contoh yang dapat direproduksi dan ilustrasi singkat dari saran yang dibuat sejauh ini, bersama dengan solusi yang secara eksplisit menjawab pertanyaan OP.

Salah satu hal yang ggplot2dilakukan dan yang dapat membingungkan adalah bahwa ia secara otomatis memadukan legenda tertentu ketika mereka dikaitkan dengan variabel yang sama. Misalnya, factor(gear)muncul dua kali, sekali untuk linetypedan sekali untuk fill, menghasilkan legenda gabungan. Sebaliknya, gearmemiliki entri legenda sendiri karena tidak diperlakukan sama seperti factor(gear). Solusi yang ditawarkan sejauh ini biasanya bekerja dengan baik. Tetapi kadang-kadang, Anda mungkin perlu mengganti panduan. Lihat contoh terakhir saya di bagian bawah.

# 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() 

masukkan deskripsi gambar di sini

Hapus semua legenda: @ user3490026

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

Hapus semua legenda: @duhaime

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

Matikan legenda: @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() 

Hapus isian agar linetype menjadi terlihat

p + guides(fill = FALSE)

Sama seperti di atas melalui fungsi scale_fill_:

p + scale_fill_discrete(guide = FALSE)

Dan sekarang satu jawaban yang mungkin untuk permintaan OP

"untuk menjaga legenda satu lapisan (halus) dan menghapus legenda lainnya (titik)"

Matikan beberapa dari ad-hoc post-hoc

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

masukkan deskripsi gambar di sini


2
Hanya perhatikan warna isian biru di plot terakhir tidak muncul pada grafik, tidak yakin mengapa ...
PatrickT

Ketik warnings()setelah Anda menjalankan kode Anda dan Anda akan melihat alasan pita biru tidak muncul.
Markus

@markus: Terima kasih, terima kasih! Saya tidak akan repot-repot mengedit contohnya, karena masalahnya terpisah. Namun, tidak masuk akal untuk memiliki legenda seketika itu tidak dihitung. Mungkin bernilai masalah di github, tapi aku tidak punya energi sekarang ...
PatrickT

13

Jika grafik Anda menggunakan keduanya filldan colorestetika, Anda dapat menghapus legenda dengan:

+ guides(fill=FALSE, color=FALSE)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.