overlay plot di ggplot2

Bagaimana cara melapisi satu plot di atas plot lainnya di ggplot2 seperti yang dijelaskan dalam kalimat berikut? Saya ingin menggambar deret waktu abu-abu di atas deret waktu merah menggunakan ggplot2 di R (sekarang deret waktu merah berada di atas deret waktu abu-abu dan saya ingin grafik saya terbalik). Ini kode saya (saya membuat beberapa data untuk menunjukkan masalah saya, kumpulan data sebenarnya jauh lebih kompleks):

install.packages("ggplot2")
library(ggplot2)

time <- rep(1:100,2)
timeseries <- c(rep(0.5,100),rep(c(0,1),50))
upper <- c(rep(0.7,100),rep(0,100))
lower <- c(rep(0.3,100),rep(0,100))
legend <- c(rep("red should be under",100),rep("grey should be above",100))

dataset <- data.frame(timeseries,upper,lower,time,legend)

ggplot(dataset, aes(x=time, y=timeseries)) +
  geom_line(aes(colour=legend, size=legend)) +
  geom_ribbon(aes(ymax=upper, ymin=lower, fill=legend), alpha = 0.2) +
  scale_colour_manual(limits=c("grey should be above","red should be under"),values = c("grey50","red")) +
  scale_fill_manual(values = c(NA, "red")) +
  scale_size_manual(values=c(0.5, 1.5)) +
  theme(legend.position="top", legend.direction="horizontal",legend.title = element_blank())

person user3577165    schedule 26.04.2014    source sumber
comment
Bisakah Anda memberikan beberapa contoh data untuk kerangka data?   -  person sriramn    schedule 27.04.2014
comment
gunakan parameter alpha di garis geom Anda   -  person rawr    schedule 27.04.2014
comment
Saya tidak ingin mengubah tingkat transparansi satu rangkaian waktu, namun saya ingin salah satu rangkaian waktu berada di atas rangkaian waktu lainnya. Anda juga sekarang dapat menjalankan kode sekarang, saya telah menambahkan beberapa data di postingan asli.   -  person user3577165    schedule 27.04.2014
comment
tukar saja pesanannya. letakkan pernyataan geom_line Anda di akhir sehingga lapisan garis abu-abu adalah yang terakhir digambar dan karenanya tepat di atas.   -  person Ramnath    schedule 27.04.2014
comment
Saya sudah mencobanya dan tidak berhasil. Mungkin karena saya juga ingin menambahkan legenda dengan pernyataan aes(colour=legend, size=legend)?   -  person user3577165    schedule 27.04.2014


Jawaban (1)


Ubah data yang Anda kelompokkan menjadi faktor dan tetapkan urutan levelnya secara eksplisit. ggplot menggambar lapisan menurut urutan ini. Selain itu, merupakan ide bagus untuk mengelompokkan kode scale_manual ke geom kode yang diterapkan agar mudah dibaca.

legend <- factor(legend, levels = c("red should be under","grey should be above"))

c <- data.frame(timeseries,upper,lower,time,legend)

ggplot(c, aes(x=time, y=timeseries)) +
  geom_ribbon(aes(ymax=upper, ymin=lower, fill=legend), alpha = 0.2) +
  scale_fill_manual(values = c("red", NA)) +
  geom_line(aes(colour=legend, size=legend)) +
  scale_colour_manual(values = c("red","grey50")) +
  scale_size_manual(values=c(1.5,0.5)) +
  theme(legend.position="top", legend.direction="horizontal",legend.title = element_blank())

Perhatikan bahwa urutan nilai dalam scale_manual sekarang dipetakan ke "abu-abu" dan "merah"

masukkan deskripsi gambar di sini

person sriramn    schedule 27.04.2014