Hapus legenda ekstra di ggplot2

92

Saya memiliki bingkai data sederhana yang saya coba gunakan untuk membuat plot garis dan titik gabungan ggplot2. Misalkan data saya terlihat seperti ini:

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

Dan saya mencoba membuat plot:

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

Hasilnya terlihat bagus dengan satu pengecualian. Ini memiliki legenda ekstra yang menunjukkan alphauntuk geom_pointlapisan saya .

Legenda Ekstra untuk transparansi <code> geom_point </code>

Bagaimana caranya agar legenda tetap menunjukkan warna grup, tetapi bukan yang menunjukkan setelan alfa saya?

Wilduck
sumber

Jawaban:

173

Estetika dapat diatur atau dipetakan dalam ggplotpanggilan.

  • Estetika didefinisikan dalam aes(...)yang dipetakan dari data, dan legenda dibuat.
  • Estetika juga dapat ditetapkan ke satu nilai, dengan mendefinisikannya di luar aes().

Dalam hal ini, tampaknya Anda ingin mengatur alpha = 0.8 dan memetakan colour = group .

Untuk melakukan ini,

Tempatkan di alpha = 0.8luar aes()definisi.

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

masukkan deskripsi gambar di sini

Untuk variabel yang dipetakan, Anda dapat menekan tampilan legenda dengan menggunakan panggilan yang guide = 'none'sesuai scale_.... misalnya.

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

Yang akan mengembalikan plot yang identik

EDIT Komentar @ Joran tepat, jawaban saya sudah lebih komprehensif

mnel
sumber
18
Ini adalah metode yang benar, karena OP mengatur daripada memetakan estetika, tetapi secara umum Anda dapat menekan tampilan legenda menggunakan sesuatu seperti g + scale_alpha(guide = "none").
joran
Memang. Jawabannya telah dielaborasi. Lebih masuk akal untuk memiliki jawaban yang komprehensif, tidak hanya khusus untuk masalah OP.
mnel
4
Terima kasih banyak atas penjelasan tambahannya. Ini sangat membantu saya memahami filosofi ggplot.
Wilduck
2
Saya telah menggunakan ggplot selama lebih dari setahun dan saya TIDAK PERNAH memahami perbedaan antara variabel yang dipetakan atau ditetapkan. Sejauh ini, ini adalah jawaban SO terbaik yang pernah saya lihat, selamat.
Amit Kohli
1
@theforestecologist Itu karena groupestetika tidak menghasilkan skala atau panduan sendiri. Itu selalu semacam memodifikasi sesuatu yang lain. Anda tidak akan pernah mendapatkan legenda untuk estetika "grup".
joran
42

Cukup tambahkan show.legend = Fkode setelah bagian yang tidak Anda inginkan.

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)
CSV
sumber
1
Ini jauh lebih intuitif daripada pemetaan vs pengaturan estetika (meskipun itu juga menghilangkan banyak kesalahpahaman)
Wassadamo
1

Untuk versi lama ggplot2 (versi sebelum 0.9.2, dirilis pada akhir 2012), jawaban ini seharusnya berfungsi:

Saya mencoba ini dengan a colour_scaledan tidak berhasil. Tampaknya colour_scale_hueitem tersebut berfungsi seperti fungsi dengan parameter default TRUE. Saya menambahkan scale_colour_hue(legend=FALSE)dan berhasil.

Saya tidak yakin apakah ini kasus untuk semua item skala warna di ggplot

Georgette
sumber
3
Penggunaan legenddalam scale_*panggilan sudah tidak digunakan lagi, lebih baik dilakukan scale_colour_hue(guide = "none").
Gregor Thomas
3
mengingat bahwa legend=FALSEini sudah usang, seperti yang ditunjukkan oleh komentar @shujaa, ini secara efektif merupakan jawaban duplikat, yaitu untuk menambahkan guide = "none"ke scale_fill/color*fungsi.
David LeBauer