Mengedit label legenda (teks) di ggplot

120

Saya telah menghabiskan waktu berjam-jam untuk melihat dokumentasi dan StackOverflow, tetapi tampaknya tidak ada solusi untuk menyelesaikan masalah saya. Saat menggunakan ggplotsaya tidak bisa mendapatkan teks yang tepat di legenda, meskipun itu dalam kerangka data saya. Saya sudah mencoba scale_colour_manual, scale_fill_manualdengan nilai yang berbeda labels=seperti c("T999", "T888")", "cols".

Ini kode saya:

T999 <- runif(10, 100, 200)
T888 <- runif(10, 200, 300)
TY <- runif(10, 20, 30)
df <- data.frame(T999, T888, TY)


ggplot(data = df, aes(x=T999, y=TY, pointtype="T999")) + 
       geom_point(size = 15, colour = "darkblue") + 
       geom_point(data = df, aes(x=T888, y=TY), colour = 'red', size = 10 ) + 
       theme(axis.text.x = element_text(size = 20), axis.title.x =element_text(size = 20),   axis.text.y = element_text(size = 20)) +
       xlab("Txxx") + ylab("TY [°C]") + labs(title="temperatures", size = 15) + 
       scale_colour_manual(labels = c("T999", "T888"), values = c("darkblue", "red")) +    theme(legend.position="topright")

Bantuan akan sangat dihargai!

pengguna3633161
sumber
8
Lihat tutorial ini untuk mengetahui format data mana yang ggplotpaling disukai (panjang, tidak lebar), dan untuk merasakan perbedaan antara memetakan sebuah aesteori ke variabel dalam aespanggilan, vs. menyetelnya di luar aes. Anda perlu meltdata Anda ke format yang panjang, dan memetakan colour(atau fill) aeske variabel yang relevan.
Henrik

Jawaban:

146

Tutorial yang disebutkan @Henrik adalah sumber yang bagus untuk mempelajari cara membuat plot dengan ggplot2paket tersebut.

Contoh dengan data Anda:

# transforming the data from wide to long
library(reshape2)
dfm <- melt(df, id = "TY")

# creating a scatterplot
ggplot(data = dfm, aes(x = TY, y = value, color = variable)) + 
  geom_point(size=5) +
  labs(title = "Temperatures\n", x = "TY [°C]", y = "Txxx", color = "Legend Title\n") +
  scale_color_manual(labels = c("T999", "T888"), values = c("blue", "red")) +
  theme_bw() +
  theme(axis.text.x = element_text(size = 14), axis.title.x = element_text(size = 16),
        axis.text.y = element_text(size = 14), axis.title.y = element_text(size = 16),
        plot.title = element_text(size = 20, face = "bold", color = "darkgreen"))

ini menghasilkan:

masukkan deskripsi gambar di sini

Seperti yang disebutkan oleh @ user2739472 di komentar: Jika Anda hanya ingin mengubah label legenda teks dan bukan warna dari palet standar ggplot, Anda dapat menggunakan scale_color_hue(labels = c("T999", "T888"))bukan scale_color_manual().

Jaap
sumber
@Sathish Seperti yang Anda lihat, judul sumbu y lebih kecil dari judul pada sumbu x. Ukuran yang berbeda digunakan untuk menggambarkan kemungkinan dan konsekuensinya. Jadi kode yang digunakan dalam jawaban itu benar.
Jaap
@Sathish Menambah komentar saya sebelumnya: tentu saja merupakan pilihan untuk melakukannya dengan cara itu! Itu semua tergantung pada apa yang ingin Anda capai ;-)
Jaap
9
Jika Anda hanya ingin mengubah label legenda teks dan bukan warna dari palet standar ggplot, Anda dapat menggunakan scale_color_hue(labels = c("T999", "T888"))bukannyascale_color_manual()
user2739472
1
@ user2739472 Thx & true. Akan menambahkannya ke jawaban saya.
Jaap
@Sathish Saya agak terlambat, tapi memperbaiki kesalahan ketik sekarang :-)
Jaap
41

Judul legenda dapat diberi label dengan estetika tertentu .

Ini dapat dicapai dengan menggunakan fungsi guides()atau labs()dari ggplot2(selengkapnya di sini dan di sini ). Ini memungkinkan Anda untuk menambahkan properti pemandu / legenda menggunakan pemetaan estetika.

Berikut adalah contoh penggunaan mtcarskumpulan data dan labs():

ggplot(mtcars, aes(x=mpg, y=disp, size=hp, col=as.factor(cyl), shape=as.factor(gear))) +
  geom_point() +
  labs(x="miles per gallon", y="displacement", size="horsepower", 
       col="# of cylinders", shape="# of gears")

masukkan deskripsi gambar di sini

Menjawab pertanyaan OP menggunakan guides():

# transforming the data from wide to long
require(reshape2)
dfm <- melt(df, id="TY")

# creating a scatterplot
ggplot(data = dfm, aes(x=TY, y=value, color=variable)) + 
  geom_point(size=5) +
  labs(title="Temperatures\n", x="TY [°C]", y="Txxx") +
  scale_color_manual(labels = c("T999", "T888"), values = c("blue", "red")) +
  theme_bw() +
  guides(color=guide_legend("my title"))  # add guide properties by aesthetic

masukkan deskripsi gambar di sini

Megatron
sumber
Saya tidak setuju dengan itu. Saat hanya menentukan judul, akan lebih mudah untuk menentukannya di argumen scale_ ..atau labs.
Jaap
Saya mengomentari solusi Anda dari 15 menit yang lalu yang menambahkan judul ke scale_color_manual(title="...", ...). Saya melihat Anda telah memodifikasinya untuk merujuk pada estetika warna labs(). Saya menawarkan solusi saya sebagai alternatif.
Megatron
Sampai sekarang, ini tampaknya memodifikasi legenda jika itu adalah gradien isian menjadi lebih tidak masuk akal.
Max Candocia