Saat ini saya sedang mencoba untuk memiliki plot yang menampilkan berbagai lintasan deret waktu dengan sumbu x (waktu) bersama.

time <- seq(from=0, to=1, length.out=101)

X1 <- runif(101)
X2 <- runif(101)
X3 <- runif(101)

par(mfcol=c(3,1))
plot(time,X1,type="l")
plot(time,X2,type="l")
plot(time,X3,type="l")

Ini membuat keluaran output

Saya sangat menghargai bantuan dan saran apa pun!

PS: Saya juga sudah tahu tentang "trik" untuk menghapus sumbu x dari dua plot di atas, tetapi ini membuat sulit untuk memvariasikan jumlah plot; katakanlah saya memiliki "X1", "X2", "X3" dan "X4" Saya harus menghitung ulang tempat label sumbu y dan ini tampaknya cukup sulit bagi saya.

Edit: Ini adalah contoh tampilannya:

enter image description here

1
nomeal 10 Mei 2021, 19:04

2 jawaban

Jawaban Terbaik

Menggunakan ggplot Anda dapat melakukan ini dengan cukup mudah dengan terlebih dahulu memasukkan data Anda ke dalam bingkai data yang diformat seperti ini:

df <- data.frame(value = c(X1, X2, X3), 
                 label = rep(c("X1", "X2", "X3"), each = 101),
                 time  = rep(time, 3))

Dan kode plotnya terlihat seperti ini:

library(ggplot2)

ggplot(df, aes(x = time, y = value)) +
  geom_line() +
  labs(y = "") +
  scale_y_continuous(expand = c(0.1, 0.1)) +
  facet_grid(label ~ ., switch = "y", scales = "free_y") +
  theme_classic() +
  theme(strip.background = element_blank(),
        strip.placement  = "outside",
        panel.spacing    = unit(0, "lines"),
        panel.border = element_rect(color = "black", fill = NA))

enter image description here

Perhatikan bahwa seperti yang diminta, kode plot tetap sama jika Anda menambahkan variabel tambahan - Anda cukup memperbarui bingkai data untuk memasukkannya. Jadi, misalnya, saya dapat menambahkan variabel X4 seperti ini:

X4 <- rnorm(101, mean = 0, sd = 10)

df <- rbind(df, data.frame(value = X4, label = rep("X4", 101), time = time))

Dan sekarang menjalankan kode plot yang sama persis menghasilkan:

enter image description here

1
Allan Cameron 13 Mei 2021, 15:56

Anda dapat menggunakan paket lattice:

df <- data.frame(value = c(X1, X2, X3), 
                 label = rep(c("X1", "X2", "X3"), each = 101),
                 time  = rep(time, 3))

library(lattice)
xyplot(value~time|label,data=df,type="l",
       scales=list(y=list(relation="free")),
       layout=c(1,4))

enter image description here

1
TarJae 10 Mei 2021, 19:00