I have data frame like this:
library(ggplot2)
d.405 <- data.frame(abs(rnorm(30)),abs(rnorm(30)),abs(rnorm(30)),abs(rnorm(30)),type="405")
d.409 <- data.frame(abs(rnorm(30)),abs(rnorm(30)),abs(rnorm(30)),abs(rnorm(30)),type="409")
all <- rbind(d.405,d.409)
colnames(all) <- c("401","402","403","404","type");
all
What I want to do is to create a 4x4 plot using GGPLOT facet. such that it looks like this:
What's the best way to go about it?
I'm stuck with the following code:
library("reshape2");
library(plyr)
allM <- melt(all, id.vars = "type")
allList <- split(allM$value, interaction(allM$type, allM$variable))
allComb <- unlist(lapply(c(1, 3), function(x) lapply(c(2 ,4), function(y) do.call(cbind,allList[c(x,y)]))), recursive=FALSE)
allNew <- do.call(rbind,
lapply(allComb, function(x) {
tmp <- as.data.frame(x)
tmp <- (within(tmp, {xval<-names(tmp)[1];
yval<-names(tmp)[2]}))
names(tmp)[1:2] <- c("405","409")
tmp}))
head(allNew)
p <- ggplot(allNew, aes(x = 405, y = 409)) + geom_smooth(method = "lm") + geom_point() + facet_grid(yval ~ xval)
# Calculate correlation for each group
cors <- ddply(allNew, .(yval, xval), summarise, cor = round(cor(405, 409), 2))
p + geom_text(data=cors, aes(label=paste("r=", cor,sep="")), x=0.5, y=0.5)
p
By simply adding + facet_wrap(~ align) to the end of our plot from above we can create a multi-panel plot with one pane per “alignment”. Think of facet_wrap() as a ribbon of plots that arranges panels into rows and columns and chooses a layout that best fits the number of panels.
facet_grid() forms a matrix of panels defined by row and column faceting variables. It is most useful when you have two discrete variables, and all combinations of the variables exist in the data. If you have only one variable with many levels, try facet_wrap() .
The function geom_point() adds a layer of points to your plot, which creates a scatterplot. ggplot2 comes with many geom functions that each add a different type of layer to a plot.
library(ggplot2)
d.405 <- data.frame(abs(rnorm(30)),abs(rnorm(30)),abs(rnorm(30)),abs(rnorm(30)),type="405")
d.409 <- data.frame(abs(rnorm(30)),abs(rnorm(30)),abs(rnorm(30)),abs(rnorm(30)),type="409")
all <- rbind(d.405,d.409)
colnames(all) <- c("401","402","403","404","type")
library("reshape2");
allM <- melt(all, id.vars = "type")
combis <- expand.grid(levels(allM$variable),levels(allM$variable))
plotdat <- lapply(seq_len(nrow(combis)),function(i) cbind(allM[allM$variable==combis[i,1] & allM$type=="405",],
allM[allM$variable==combis[i,2] & allM$type=="409",c("type","variable","value")]))
plotdat <- do.call(rbind,plotdat)
names(plotdat) <- c("type.x","var.x","x","type.y","var.y","y")
plotdat$var.x <- paste("x:",plotdat$var.x)
plotdat$var.y <- paste("y:",plotdat$var.y)
library(plyr)
cors <- ddply(plotdat,.(var.x,var.y),summarize,cor=format(signif(cor(x,y),2),scientific=-2))
cors$x <- 2.2
cors$y <- 2.5
p <- ggplot(plotdat,aes(x=x,y=y)) +
geom_point() +
geom_smooth(method="lm") +
geom_text(data=cors,aes(label=paste("r =",cor))) +
facet_wrap(~var.y*var.x,ncol=4) +
xlab("405") + ylab("409")
print(p)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With