使用 ggplot() 和 facet_grid() 绘制多个图形
Plot several graphs using ggplot() and facet_grid()
我想知道如何使用 ggplot()
和 facet_grid()
在一个屏幕上绘制多个图表,因为我确实需要针对不同的统计变量多次重复此过程。
我有两个数据框满足观察和另一个预测。它们都是550 x 76
.
的矩阵
数据框 1:
Observations x1 x2 x3 x5 x6 x7 x8 x9 x10 x11 x13 .... x75
Observation1 -0.1 0.05 0.1 0.2 0.3 0.04 0.3 -0.1 0.02 0.02 -0.2 ....0.8
Observation2 -0.3 0.05 0.1 0.1 0.3 0.03 0.3 -0.1 0.03 0.02 -0.2 ....0.6
Observation3 -0.2 0.05 0.1 0.4 0.3 0.02 0.3 -0.1 0.01 0.01 -0.2 ....0.1
Observation550 -0.1 0.05 0.8 0.4 0.3 0.02 0.7 -0.1 0.01 0.01 -0.2 ....0.1
数据框 2:
Predictions x1 x2 x3 x5 x6 x7 x8 x9 x10 x11 x13 .... x75
Prediction1 -0.1 0.05 0.1 0.2 0.3 0.04 0.3 -0.1 0.02 0.02 -0.2 ....0.8
Prediction2 -0.3 0.05 0.1 0.1 0.3 0.03 0.3 -0.1 0.03 0.02 -0.2 ....0.6
Prediction3 -0.2 0.05 0.1 0.4 0.3 0.02 0.3 -0.1 0.01 0.01 -0.2 ....0.1
Prediction550 -0.1 0.05 0.8 0.4 0.3 0.02 0.7 -0.1 0.01 0.01 -0.2 ....0.1
看来我必须只创建一个数据框或列表,里面有这两个矩阵才能使用 ggplot()
。
我已经这样做了,但是使用的是 r
的标准图。
提前致谢
我想这就是你想要的。
library(ggplot2)
library(reshape2)
# Fake some data
set.seed(1234)
nc <- 15
nr <- 20
onms <- sprintf("Observation%d",1:nr)
pnms <- sprintf("Prediction%d",1:nr)
cnames <- sprintf("x%d",1:nc)
odf <- data.frame(Observations=onms)
pdf <- data.frame(Predictions=pnms)
for(i in 1:nc){
vk1 <- 0.01*rnorm(nr)
odf[[cnames[i]]] <- round(cumsum(vk1),3)
vk2 <- 0.02*rnorm(nr)
pdf[[cnames[i]]] <- round(cumsum(vk1) + cumsum(vk2),3)
}
# This is the data we need
head(odf)
head(pdf)
# Now change the pred. colnames so they don't collide with the obs. colnames
newpnames <- sprintf("p_x%d",1:nc)
names(pdf) <- c("series",newpnames)
names(odf)[1] <- "series"
# Merge the data into a long format
modf <- melt(odf,id.vars="series",measure.vars=cnames)
mpdf <- melt(pdf,id.vars="series",measure.vars=newpnames)
mdf <- rbind(modf,mpdf)
# Now extract the fields we need into new columns
mdf$x <- as.numeric(gsub(".*[A-Za-z]","",mdf$variable))
mdf$frame <- as.numeric(gsub(".*[A-Za-z]","",mdf$series))
frameNames <- sprintf("Frame:%d",1:max(mdf$frame))
mdf$frame <- factor(sprintf("Frame:%d",mdf$frame),levels=frameNames)
mdf$kind <- substr(mdf$series,1,3)
# Finally plot it
ggplot(mdf) + geom_line(aes(x=x,y=value,color=kind)) + facet_wrap( ~ frame )
# ecdf version
ggplot(mdf,aes(x=value,color=kind)) + stat_ecdf(geom="step") + facet_wrap( ~ frame )
请注意,我伪造数据后的 head
语句为您提供了这个,所以这与我相信的起点很接近:
> head(odf)
Observations x1 x2 x3 x4 x5 x6 x7 x8 x9
1 Observation1 -0.012 0.014 -0.002 -0.002 -0.008 0.005 0.001 -0.010 0.001
2 Observation2 -0.009 0.004 -0.003 -0.010 -0.011 0.012 0.005 -0.005 0.002
3 Observation3 0.002 -0.005 -0.017 0.011 -0.015 0.014 -0.006 -0.012 -0.003
4 Observation4 -0.022 -0.008 -0.019 0.018 -0.017 0.021 0.001 -0.004 -0.019
5 Observation5 -0.018 -0.017 -0.010 0.037 -0.013 0.024 0.008 -0.012 -0.019
6 Observation6 -0.013 -0.027 -0.003 0.037 -0.007 0.031 0.011 -0.009 -0.026
x10 x11 x12 x13 x14 x15
1 0.009 -0.012 0.005 -0.007 0.015 -0.007
2 0.028 -0.012 0.004 0.005 0.013 -0.018
3 0.028 -0.016 0.005 -0.012 0.026 -0.021
4 0.027 -0.025 -0.004 -0.008 0.026 -0.020
5 0.022 -0.021 -0.017 -0.006 0.019 -0.012
6 0.036 -0.019 -0.003 0.026 0.011 0.001
> head(pdf)
Predictions x1 x2 x3 x4 x5 x6 x7 x8 x9
1 Prediction1 -0.009 0.028 0.007 -0.009 -0.063 0.023 0.020 -0.022 0.000
2 Prediction2 -0.016 0.068 -0.005 0.011 -0.068 0.043 0.017 -0.036 0.007
3 Prediction3 -0.014 0.059 -0.017 0.045 -0.052 0.090 0.009 -0.047 0.021
4 Prediction4 -0.029 0.042 -0.029 0.050 -0.046 0.121 -0.019 -0.018 0.028
5 Prediction5 -0.038 0.032 -0.037 0.079 -0.024 0.130 -0.005 -0.026 0.031
6 Prediction6 -0.062 0.058 -0.027 0.087 0.022 0.124 -0.016 -0.036 0.047
x10 x11 x12 x13 x14 x15
1 -0.027 -0.037 0.007 0.012 0.023 -0.026
2 -0.061 -0.029 -0.010 0.000 0.048 -0.027
3 -0.073 -0.035 -0.004 -0.003 0.048 -0.023
4 -0.045 -0.041 0.000 -0.001 0.048 -0.025
5 -0.034 -0.024 -0.038 0.037 0.030 -0.007
6 0.005 -0.020 -0.045 0.064 -0.002 -0.005
终于得出这个情节:
而这个 ecdf
情节:
我想知道如何使用 ggplot()
和 facet_grid()
在一个屏幕上绘制多个图表,因为我确实需要针对不同的统计变量多次重复此过程。
我有两个数据框满足观察和另一个预测。它们都是550 x 76
.
数据框 1:
Observations x1 x2 x3 x5 x6 x7 x8 x9 x10 x11 x13 .... x75
Observation1 -0.1 0.05 0.1 0.2 0.3 0.04 0.3 -0.1 0.02 0.02 -0.2 ....0.8
Observation2 -0.3 0.05 0.1 0.1 0.3 0.03 0.3 -0.1 0.03 0.02 -0.2 ....0.6
Observation3 -0.2 0.05 0.1 0.4 0.3 0.02 0.3 -0.1 0.01 0.01 -0.2 ....0.1
Observation550 -0.1 0.05 0.8 0.4 0.3 0.02 0.7 -0.1 0.01 0.01 -0.2 ....0.1
数据框 2:
Predictions x1 x2 x3 x5 x6 x7 x8 x9 x10 x11 x13 .... x75
Prediction1 -0.1 0.05 0.1 0.2 0.3 0.04 0.3 -0.1 0.02 0.02 -0.2 ....0.8
Prediction2 -0.3 0.05 0.1 0.1 0.3 0.03 0.3 -0.1 0.03 0.02 -0.2 ....0.6
Prediction3 -0.2 0.05 0.1 0.4 0.3 0.02 0.3 -0.1 0.01 0.01 -0.2 ....0.1
Prediction550 -0.1 0.05 0.8 0.4 0.3 0.02 0.7 -0.1 0.01 0.01 -0.2 ....0.1
看来我必须只创建一个数据框或列表,里面有这两个矩阵才能使用 ggplot()
。
我已经这样做了,但是使用的是 r
的标准图。
提前致谢
我想这就是你想要的。
library(ggplot2)
library(reshape2)
# Fake some data
set.seed(1234)
nc <- 15
nr <- 20
onms <- sprintf("Observation%d",1:nr)
pnms <- sprintf("Prediction%d",1:nr)
cnames <- sprintf("x%d",1:nc)
odf <- data.frame(Observations=onms)
pdf <- data.frame(Predictions=pnms)
for(i in 1:nc){
vk1 <- 0.01*rnorm(nr)
odf[[cnames[i]]] <- round(cumsum(vk1),3)
vk2 <- 0.02*rnorm(nr)
pdf[[cnames[i]]] <- round(cumsum(vk1) + cumsum(vk2),3)
}
# This is the data we need
head(odf)
head(pdf)
# Now change the pred. colnames so they don't collide with the obs. colnames
newpnames <- sprintf("p_x%d",1:nc)
names(pdf) <- c("series",newpnames)
names(odf)[1] <- "series"
# Merge the data into a long format
modf <- melt(odf,id.vars="series",measure.vars=cnames)
mpdf <- melt(pdf,id.vars="series",measure.vars=newpnames)
mdf <- rbind(modf,mpdf)
# Now extract the fields we need into new columns
mdf$x <- as.numeric(gsub(".*[A-Za-z]","",mdf$variable))
mdf$frame <- as.numeric(gsub(".*[A-Za-z]","",mdf$series))
frameNames <- sprintf("Frame:%d",1:max(mdf$frame))
mdf$frame <- factor(sprintf("Frame:%d",mdf$frame),levels=frameNames)
mdf$kind <- substr(mdf$series,1,3)
# Finally plot it
ggplot(mdf) + geom_line(aes(x=x,y=value,color=kind)) + facet_wrap( ~ frame )
# ecdf version
ggplot(mdf,aes(x=value,color=kind)) + stat_ecdf(geom="step") + facet_wrap( ~ frame )
请注意,我伪造数据后的 head
语句为您提供了这个,所以这与我相信的起点很接近:
> head(odf) Observations x1 x2 x3 x4 x5 x6 x7 x8 x9 1 Observation1 -0.012 0.014 -0.002 -0.002 -0.008 0.005 0.001 -0.010 0.001 2 Observation2 -0.009 0.004 -0.003 -0.010 -0.011 0.012 0.005 -0.005 0.002 3 Observation3 0.002 -0.005 -0.017 0.011 -0.015 0.014 -0.006 -0.012 -0.003 4 Observation4 -0.022 -0.008 -0.019 0.018 -0.017 0.021 0.001 -0.004 -0.019 5 Observation5 -0.018 -0.017 -0.010 0.037 -0.013 0.024 0.008 -0.012 -0.019 6 Observation6 -0.013 -0.027 -0.003 0.037 -0.007 0.031 0.011 -0.009 -0.026 x10 x11 x12 x13 x14 x15 1 0.009 -0.012 0.005 -0.007 0.015 -0.007 2 0.028 -0.012 0.004 0.005 0.013 -0.018 3 0.028 -0.016 0.005 -0.012 0.026 -0.021 4 0.027 -0.025 -0.004 -0.008 0.026 -0.020 5 0.022 -0.021 -0.017 -0.006 0.019 -0.012 6 0.036 -0.019 -0.003 0.026 0.011 0.001 > head(pdf) Predictions x1 x2 x3 x4 x5 x6 x7 x8 x9 1 Prediction1 -0.009 0.028 0.007 -0.009 -0.063 0.023 0.020 -0.022 0.000 2 Prediction2 -0.016 0.068 -0.005 0.011 -0.068 0.043 0.017 -0.036 0.007 3 Prediction3 -0.014 0.059 -0.017 0.045 -0.052 0.090 0.009 -0.047 0.021 4 Prediction4 -0.029 0.042 -0.029 0.050 -0.046 0.121 -0.019 -0.018 0.028 5 Prediction5 -0.038 0.032 -0.037 0.079 -0.024 0.130 -0.005 -0.026 0.031 6 Prediction6 -0.062 0.058 -0.027 0.087 0.022 0.124 -0.016 -0.036 0.047 x10 x11 x12 x13 x14 x15 1 -0.027 -0.037 0.007 0.012 0.023 -0.026 2 -0.061 -0.029 -0.010 0.000 0.048 -0.027 3 -0.073 -0.035 -0.004 -0.003 0.048 -0.023 4 -0.045 -0.041 0.000 -0.001 0.048 -0.025 5 -0.034 -0.024 -0.038 0.037 0.030 -0.007 6 0.005 -0.020 -0.045 0.064 -0.002 -0.005
终于得出这个情节:
而这个 ecdf
情节: