I have a data.frame with following variables:
centers.df <- data.frame(clust1 = sample(c(1,2), 50, replace=T), clust2 = sample(c(1,2), 50, replace =T), brand = sample(letters[1:4], 50, replace = T), cpal = sample(LETTERS[1:4], 50, replace = T), center = rnorm(100))
I would like to create a 2x2 plot output by using ggplot.
What I have done so far:
plot_list <- vector("list", length = sum(length(unique(centers.df$clust1)), length(unique(centers.df$clust2)))
for (pl in 1:length(plot_list)) {
for (i in 1:length(unique(centers.df$clust1))) {
for (j in 1:length(unique(centers.df$clust2))) {
yrange <- range(centers.df$center)
plot.df<- subset(centers.df, centers.df$clust1==i & centers.df$clust2==j)
counts<- aggregate(plot.df$center, by=list(plot.df$cpal), FUN="sum")
g <- ggplot(counts, aes(counts[,1], counts[,2])) + geom_bar(stat = "identity") +
theme(axis.title.x= element_blank(), axis.title.y= element_blank(),
axis.text.x = element_text(color="#993333", size=14, angle=90),
axis.line = element_line(colour = "darkblue",size = 1, linetype = "solid")) +
ggtitle(paste0("Cluster ",i, ",", j, " #PoS ",length(res.som$Clusters[[i,j]])))
plot_list[[pl]] <- g
}
}
}
# grid.arrange(grobs=plot_list, nrow=2, ncol=2)
What I would like to have:
par(mfrow = c(length(unique(centers.df$clust1)), length(unique(centers.df$clust2))))
for (i in 1:length(unique(centers.df$clust1))) {
for (j in 1:length(unique(centers.df$clust2))) {
yrange <- range(centers.df$center)
plot.df<- subset(centers.df, centers.df$clust1==i & centers.df$clust2==j)
counts<- aggregate(plot.df$center, by=list(plot.df$cpal), FUN="sum")
barplot(height = counts[,2], las=2, cex.names = 0.7, col= "darkblue", ylim=yrange, #yaxt="n",
names.arg=paste((as.character(counts[,1]))),
main=paste0("Cluster ",i, ",", j, " #PoS ",length(res.som$Clusters[[i,j]])))
}
}

