如何在R中从多个数据框中绘制列?

问题描述 投票:0回答:2

原先的想法很简单,但这里的想法已用尽。我想在一张图中绘制三个data.frame,以使plot-A使用所有column A中的data.frame数据包含线图,即DF1,DF2,DF3,plot-B应包含线图使用所有column B中的data.frame数据,以及C都一样。过去,我使用facet_wrap,但我不知道该如何处理。这是我的简单代码,它不会产生任何图,但是会给出我想要的想法。 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上应用具有大量列的代码,而不仅仅是三列。因此,使流程自动化将有所帮助。

r dataframe ggplot2 facet-wrap line-plot
2个回答
2
投票

用途:

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)

0
投票

喜欢这个

唯一的手动步骤是为每个data.frame提供一个标识列(可能使用此列自动执行?Add column containing data frame name to a list of data frames

然后将它们全部组合成一个数据框,并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~.)
© www.soinside.com 2019 - 2024. All rights reserved.