如何在 R 中绘制来自多个数据框的绘图列?
How to line plot columns from multiple data frame in R?
认为这很容易,但我 运行 没有想法。我有三个 data.frame
我想在一个图中绘制,这样 plot-A 将包含使用来自所有 data.frame
的 column A
数据的线图,即 DF1,DF2,DF3
, plot-B 应该包含使用来自所有 data.frame
的 column B
数据的线图,对于 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
,而不仅仅是三列。所以自动化流程会有所帮助。
使用:
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 提供一个标识列(可能会自动使用它?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~.)
认为这很容易,但我 运行 没有想法。我有三个 data.frame
我想在一个图中绘制,这样 plot-A 将包含使用来自所有 data.frame
的 column A
数据的线图,即 DF1,DF2,DF3
, plot-B 应该包含使用来自所有 data.frame
的 column B
数据的线图,对于 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
,而不仅仅是三列。所以自动化流程会有所帮助。
使用:
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()
编辑: 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 提供一个标识列(可能会自动使用它?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~.)