簡體   English   中英

如何從 R 中的多個數據幀中排列 plot 列?

[英]How to line plot columns from multiple data frame in R?

認為這很容易,但這里的想法已經不多了。 我有三個data.frame我想在一個圖中 plot 使得 plot-A 將包含使用來自所有data.framecolumn A的數據的線圖,即DF1,DF2,DF3 , plot-B 應該包含線使用所有data.framecolumn B的數據繪制圖,同樣適用於 C。 過去我使用facet_wrap ,但是,我不知道如何 go 關於這個。 這是我的簡單代碼,它不會產生任何 plot 但會給出我想要的想法。 一個ggplot選項會很棒。

library(gridExtra)

DF1 = data.frame(Month = 1:12, A = runif(12, 1,10), B = runif(12,5,10), C = runif(12, 3,9))
DF2 = data.frame(Month = 1:12, A = runif(12, 4,13), B = runif(12,6,14), C = runif(12, 3,12))
DF3 = data.frame(Month = 1:12, A = runif(12, 2,15), B = runif(12,1,9), C = runif(12, 3,15))

G1 = plot(DF1$Month, y=DF1$A, "l")
lines(DF2$A, col = "red")
lines(DF3$A, col = "blue")

G2 = plot(DF1$Month, y=DF1$B, "l")
lines(DF2$B, col = "red")
lines(DF3$B, col = "blue")

G3 = plot(DF1$Month, y=DF1$C, "l")
lines(DF2$C, col = "red")
lines(DF3$C, col = "blue")

grid.arrange(G1,G2,G3, ncol = 3)

注意:在我的示例中,我在每個data.frame中有三列,但是,我想將代碼應用於具有大量列的data.frame ——而不僅僅是三列。 所以自動化這個過程會有所幫助。

利用:

par(mfrow=c(1,3))

DF1 = data.frame(Month = 1:12, A = runif(12, 1,10), B = runif(12,5,10), C = runif(12, 3,9))
DF2 = data.frame(Month = 1:12, A = runif(12, 4,13), B = runif(12,6,14), C = runif(12, 3,12))
DF3 = data.frame(Month = 1:12, A = runif(12, 2,15), B = runif(12,1,9), C = runif(12, 3,15))

plot(DF1$Month, y=DF1$A, "l")
lines(DF2$A, col = "red")
lines(DF3$A, col = "blue")

plot(DF1$Month, y=DF1$B, "l")
lines(DF2$B, col = "red")
lines(DF3$B, col = "blue")

plot(DF1$Month, y=DF1$C, "l")
lines(DF2$C, col = "red")
lines(DF3$C, col = "blue")

您可以使用dev.off()將繪圖區域重置回 1 x 1

編輯: ggplot 解決方案是:

library(ggplot2)
library(gridExtra)
p1 <- ggplot(NULL)+
  geom_line(data = DF1,aes(x=Month,y=A),color="black")+
  geom_line(data = DF2,aes(x=Month,y=A),color="red")+
  geom_line(data = DF3,aes(x=Month,y=A),color="blue")

p2 <- ggplot(NULL)+
  geom_line(data = DF1,aes(x=Month,y=B),color="black")+
  geom_line(data = DF2,aes(x=Month,y=B),color="red")+
  geom_line(data = DF3,aes(x=Month,y=B),color="blue")

p3 <- ggplot(NULL)+
  geom_line(data = DF1,aes(x=Month,y=C),color="black")+
  geom_line(data = DF2,aes(x=Month,y=C),color="red")+
  geom_line(data = DF3,aes(x=Month,y=C),color="blue")

grid.arrange(p1,p2,p3,nrow=1)

像這樣

唯一的手動步驟是為每個 data.frame 提供一個標識列(可能使用此自動執行? 將包含數據框名稱的列添加到數據框列表中

然后將它們全部組合成一個 dataframe 並gather列,以便 data.frame 為長格式。 然后您可以使用facet_grid / facet_wrap如您所述

DF1 = data.frame(Month = 1:12, A = runif(12, 1,10), B = runif(12,5,10), C = runif(12, 3,9))
DF2 = data.frame(Month = 1:12, A = runif(12, 4,13), B = runif(12,6,14), C = runif(12, 3,12))
DF3 = data.frame(Month = 1:12, A = runif(12, 2,15), B = runif(12,1,9), C = runif(12, 3,15))


DF1$df <- "1"
DF2$df <- "2"
DF3$df <- "3"

library(tidyr)
library(ggplot2)
AllDf <- rbind(DF1,DF2,DF3)

AllDf_l <- AllDf %>% gather(Var,Value, A:C)

ggplot(AllDf_l, aes(x = Month, y = Value, colour = df))+geom_line()+
  facet_grid(Var~.)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM