Bagaimana cara mengubah judul legenda di ggplot


300

Saya memiliki plot berikut seperti di bawah ini. Itu dibuat dengan perintah ini:

library(ggplot2)

df <- data.frame(cond = factor(rep(c("A", "B"), each = 200)), 
                 rating = c(rnorm(200), rnorm(200, mean=.8)))

ggplot(df, aes(x=rating, fill=cond)) + 
geom_density(alpha = .3) +
xlab("NEW RATING TITLE") +
ylab("NEW DENSITY TITLE")

Sekarang hal berikutnya yang ingin saya lakukan adalah mengubah judul legenda dari cond ke NEW LEGEND TITLE .

Jadi yang saya lakukan adalah menambahkan baris berikut, tambahkan akhir kode di atas:

+labs(colour="NEW LEGEND TITLE")

Tapi itu tidak berhasil. Apa cara yang benar untuk melakukannya?

masukkan deskripsi gambar di sini


110
labs(fill="xyz")harus dilakukan
baptiste

1
@aptapte Saya sudah kembali ke pertanyaan ini berkali-kali tanpa memperhatikan komentar Anda, bisakah Anda menuliskannya sebagai jawaban? IMO itu solusi paling sederhana dan patut dikenali
User632716

3
@ User632716 ini sudah ada dalam jawaban seseorang di bawah ini
baptiste

7
itu tidak bekerja ...
shenglih

1
Bagi mereka yang mencari jawaban yang melibatkan plot dengan banyak geom_pernyataan, saya merekomendasikan jawabannya di stackoverflow.com/a/38485985/1169233 , itu satu-satunya yang bekerja untuk saya.
Waldir Leoncio

Jawaban:


348

Ini seharusnya bekerja:

p <- ggplot(df, aes(x=rating, fill=cond)) + 
           geom_density(alpha=.3) + 
           xlab("NEW RATING TITLE") + 
           ylab("NEW DENSITY TITLE")
p <- p + guides(fill=guide_legend(title="New Legend Title"))

(atau sebagai alternatif)

p + scale_fill_discrete(name = "New Legend Title")

10
Alternatif lain adalahp$labels$fill <- "New Legend Title"
Alex Holcombe

3
apa perbedaan antara pemandu dan scale_fill_discrete
Medhat

18
p$labels$filltidak bekerja untuk saya. Dengan ggplot2_2.1.0saya menggunakanp$labels$colour <- "New legend title"
ClementWalter

4
p$labels$fill bagus tetapi jika Anda menggunakan lebih dari satu variabel dalam estetika (linetype, warna, bentuk) di aes, Anda harus mengubahnya untuk masing-masing secara terpisah.
Disiplin

226

Saya tidak menggali banyak tentang ini tetapi karena Anda menggunakan fill = cond in ggplot (),

 + labs(color='NEW LEGEND TITLE') 

mungkin tidak berhasil. Namun jika Anda mengganti warna dengan isi , itu berfungsi!

+ labs(fill='NEW LEGEND TITLE') 

Ini bekerja untuk saya di ggplot2_2.1.0


20
Saya pikir ini adalah jawaban yang paling keras, ia melakukan persis apa yang diminta OP dengan satu baris ekstra paling banyak
Leo

3
baik color = dan fill = harus berfungsi. Ini adalah jawaban "benar" untuk pertanyaan, IMO
Dan

3
apakah warna isi akan berfungsi tergantung pada "cond" (atau kelompok dalam kasus lain) apa yang benar-benar dipetakan. Penjelasan yang baik dapat ditemukan di cookbook-r.com/Graphs/Legends_(ggplot2)
user1442363

3
Ini jawaban terbaik.
Akshay Gaur

1
Catatan: di ggplot2 3.0+ solusi ini tidak berfungsi: dipecahkan olehp + guides(fill=guide_legend(title="New Legend Title"))
Sumanth Lazarus

39

Karena Anda memiliki dua kerapatan, saya bayangkan Anda mungkin ingin mengatur warna Anda sendiri scale_fill_manual.

Jika demikian, Anda dapat melakukannya:

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

legend_title <- "OMG My Title"

ggplot(df, aes(x=x, fill=group)) + geom_density(alpha=.3) +   
    scale_fill_manual(legend_title,values=c("orange","red"))

masukkan deskripsi gambar di sini


27

Tidak satu pun dari kode di atas bekerja untuk saya.

Inilah yang saya temukan dan berhasil.

labs(color = "sale year")

Anda juga dapat memberi ruang antara judul dan tampilan dengan menambahkan \ndi bagian akhir.

labs(color = 'sale year\n")


2
Bagaimana ini berbeda dari jawaban ini ?
merv

3
Yap, saya mencoba setiap contoh di atas dan ini adalah satu-satunya yang bekerja untuk saya. Terima kasih!
SummerEla

Bagaimana cara ini bekerja diberikan pertanyaan posting asli, tampaknya fillbukannya color(atau colour) diperlukan? Mengingat waktu pertanyaan, mungkin itu ggplot2terkait versi.
steveb

1
@erv Perbedaan utama adalah bahwa ini benar-benar berfungsi.
Luís de Sousa

16

Karena dalam kode yang Anda gunakan ggplot(data, fill= cond)untuk membuat histogram Anda perlu menambahkan judul legenda dengan juga menggunakan "isi" di bagian label yaitu +labs(fill="Title name"). Jika Anda menggunakan tipe plot yang berbeda dengan kode ggplot (data, color = cond), maka Anda dapat menggunakannya +labs(colour= "Title Name"). Singkatnya, argumen lab harus cocok dengan argumen aes.

Saya telah terbiasa + guides(fill=guide_legend("my awesome title"))mengubah judul legenda pada plot geom_bar tetapi sepertinya tidak berhasil untuk geom_point.


..., tetapi untuk geom_point(), ini bekerja untuk saya:guides(color=guide_legend("Type:"))
knb

1
@knb, metode Anda berfungsi:guides(color=guide_legend("Score Ranking:"))
bmc

1
Bagaimana ini berbeda dari jawaban ini ?
merv

6

Ada jawaban lain yang sangat sederhana yang dapat bekerja untuk beberapa grafik sederhana.

Cukup tambahkan panggilan ke guide_legend () ke dalam grafik Anda.

ggplot(...) + ... + guide_legend(title="my awesome title")

Seperti yang ditunjukkan dalam dokumen ggplot yang sangat bagus .

Jika itu tidak berhasil, Anda dapat mengatur parameter panduan dengan panggilan ke panduan :

ggplot(...) + ... + guides(fill=guide_legend("my awesome title"))

Anda juga dapat memvariasikan bentuk / warna / ukuran dengan menentukan parameter ini untuk panggilan Anda guidesjuga.


26
Ini tidak berhasil untuk saya, tetapi qplot(…) + guides(color=guide_legend(title="sale year"))berhasil
Arnaud A

3

Hanya untuk menambah daftar (opsi lain di sini tidak bekerja untuk saya), Anda juga dapat menggunakan fungsi update_labels untuk ggplot:

p <- ggplot(df, aes(x=rating, fill=cond)) + 
           geom_density(alpha=.3) + 
           xlab("NEW RATING TITLE") + 
           ylab("NEW DENSITY TITLE")
update_labels(p, list(colour="MY NEW LEGEND TITLE")

Ini juga akan memungkinkan Anda untuk mengubah label sumbu x dan y, dengan baris terpisah:

update_labels(p, list(x="NEW X LABEL",y="NEW Y LABEL")

2

Saya perhatikan ada dua cara untuk mengubah / menentukan legend.title untuk ggboxplot ():

library(ggpubr)

bxp.defaultLegend <- ggboxplot(ToothGrowth, x = "dose", y = "len",
                               color = "dose", palette = "jco")

# Solution 1, setup legend.title directly in ggboxplot()
bxp.legend <- ggboxplot(ToothGrowth, x = "dose", y = "len",
                 color = "dose", palette = "jco", legend.title="Dose (mg)")

# Solution 2: Change legend title and appearnace in ggboxplot() using labs() and theme() option:
plot1 <-  bxp.defaultLegend + labs(color = "Dose (mg)") +
  theme(legend.title = element_text(color = "blue", size = 10), legend.text = element_text(color = "red"))

ggarrange(list(bxp.legend, bxp.defaultLegend, plot1), nrow = 1, ncol = 3,  common.legend = TRUE)

Kode diubah berdasarkan contoh dari GitHub .


1

Saya menggunakan facet_wrap di ggplot saya dan tidak ada solusi yang disarankan yang bekerja untuk saya kecuali solusi ArnaudA:

qplot() + guides(color=guide_legend(title="sale year")) 

1

Banyak orang menghabiskan banyak waktu mengganti label, label legenda, judul, dan nama sumbu karena mereka tidak tahu bahwa mungkin untuk memuat tabel di R yang berisi spasi " ". Namun Anda dapat melakukan ini untuk menghemat waktu atau mengurangi ukuran kode Anda, dengan menentukan pemisah saat Anda memuat tabel yang misalnya dibatasi dengan tab (atau pemisah lain selain standar atau satu ruang tunggal):

read.table(sep = '\t')

atau dengan menggunakan parameter pemuatan default format csv:

read.csv()

Ini berarti Anda dapat secara langsung menyimpan nama "NEW LEGEND TITLE"sebagai nama kolom (header) dalam file data asli Anda untuk menghindari menentukan judul legenda baru di setiap plot.


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.