Saya punya pertanyaan tentang legenda di ggplot2. Saya berhasil menggambar tiga garis dalam grafik yang sama dan ingin menambahkan legenda dengan tiga warna yang digunakan. Ini adalah kode yang digunakan
library(ggplot2)
require(RCurl)
link<-getURL("https://dl.dropbox.com/s/ds5zp9jonznpuwb/dat.txt")
datos<- read.csv(textConnection(link),header=TRUE,sep=";")
datos$fecha <- as.POSIXct(datos[,1], format="%d/%m/%Y")
temp = ggplot(data=datos,aes(x=fecha, y=TempMax,colour="1")) +
geom_line(colour="red") + opts(title="TITULO") +
ylab("Temperatura (C)") + xlab(" ") +
scale_y_continuous(limits = c(-10,40)) +
geom_line(aes(x=fecha, y=TempMedia,colour="2"),colour="green") +
geom_line(aes(x=fecha, y=TempMin,colour="2"),colour="blue") +
scale_colour_manual(values=c("red","green","blue"))
temp
dan hasilnya
Saya ingin menambahkan legenda dengan tiga warna yang digunakan dan nama variabel (TempMax, TempMedia, dan TempMin). saya telah mencoba
scale_colour_manual
tetapi tidak dapat menemukan cara yang tepat.
Sayangnya data asli dihapus dari situs tertaut dan tidak dapat dipulihkan. Tetapi mereka datang dari file data cuaca dengan format ini
"date","Tmax","Tmin","Tmed","Precip.diaria","Wmax","Wmed"
2000-07-31 00:00:00,-1.7,-1.7,-1.7,-99.9,20.4,20.4
2000-08-01 00:00:00,22.9,19,21.11,-99.9,6.3,2.83
2000-08-03 00:00:00,24.8,12.3,19.23,-99.9,6.8,3.87
2000-08-04 00:00:00,20.3,9.4,14.4,-99.9,8.3,5.29
2000-08-08 00:00:00,25.7,14.4,19.5,-99.9,7.9,3.22
2000-08-09 00:00:00,29.8,16.2,22.14,-99.9,8.5,3.27
2000-08-10 00:00:00,30,17.8,23.5,-99.9,7.7,3.61
2000-08-11 00:00:00,27.5,17,22.68,-99.9,8.8,3.85
2000-08-12 00:00:00,24,13.3,17.32,-99.9,8.4,3.49
Jawaban:
Saya cenderung menemukan bahwa jika saya menentukan warna individu dalam beberapa geom, saya salah melakukannya. Begini cara saya memplot data Anda:
Yang tersisa hanyalah perintah ggplot sederhana:
Contoh plot
sumber
Karena @Etienne bertanya bagaimana melakukan ini tanpa melelehkan data (yang secara umum adalah metode yang disukai, tapi saya tahu mungkin ada beberapa kasus di mana itu tidak mungkin), saya menyajikan alternatif berikut.
Mulai dengan subset dari data asli:
Anda bisa mendapatkan efek yang diinginkan dengan (dan ini juga membersihkan kode plot asli):
Idenya adalah bahwa setiap baris diberi warna dengan memetakan
colour
estetika ke string konstan. Memilih string yang ingin Anda tampilkan dalam legenda adalah yang termudah. Fakta bahwa dalam kasus ini sama dengan namay
variabel yang diplot tidak signifikan; itu bisa berupa serangkaian string. Sangat penting bahwa ini ada di dalamaes
panggilan; Anda membuat pemetaan untuk "variabel" ini.scale_colour_manual
sekarang dapat memetakan string ini ke warna yang sesuai. Hasilnya adalahDalam beberapa kasus, pemetaan antara level dan warna perlu dibuat eksplisit dengan menyebutkan nilai dalam skala manual (terima kasih kepada @DaveRGP untuk menunjukkan ini):
(memberi angka yang sama seperti sebelumnya). Dengan nilai yang disebutkan, jeda dapat digunakan untuk mengatur urutan dalam legenda dan urutan apa pun dapat digunakan dalam nilai.
sumber
scale_colour_manual("", values = c("TempMax" = "red", "TempMedia" = "green", "TempMin" = "blue"))
mana TempMax, TempMedia, dan TempMin ditentukan sebagai argumen warna seperti pada jawaban di atas.Saya sangat menyukai solusi yang diusulkan oleh @Brian Diggs. Namun, dalam kasus saya, saya membuat plot garis dalam satu lingkaran daripada memberikannya secara eksplisit karena saya tidak tahu apriori berapa banyak plot yang akan saya miliki. Ketika saya mencoba untuk mengadaptasi kode @ Brian saya menghadapi beberapa masalah dengan penanganan warna dengan benar. Ternyata saya perlu memodifikasi fungsi estetika. Jika seseorang memiliki masalah yang sama, berikut adalah kode yang berfungsi untuk saya.
Saya menggunakan bingkai data yang sama dengan @Brian:
Dalam kasus saya, saya menghasilkan
my.cols
danmy.names
secara dinamis, tetapi saya tidak ingin membuat hal-hal yang tidak perlu jadi saya berikan secara eksplisit di sini. Tiga garis ini membuat pemesanan legenda dan menetapkan warna lebih mudah.Dan inilah plotnya:
sumber
ggplot
diharapkan.