我的挑战是一次绘制几个条形图,一个不同子集的每个变量的图。我的目标是比较每个变量的区域差异。我想通过R Markdown将所有结果图打印到html文件中。
制作自动分组条形图的主要困难是您需要使用table(data$Var[i], data$Region)
将这些组制成表格,但我不知道如何自动执行此操作。我非常感谢这一点。
以下是我的子集之一的示例:
# To Create this example of data:
b <- rep(matrix(c(1,2,3,2,1,3,1,1,1,1)), times=10)
data <- matrix(b, ncol=10)
colnames(data) <- paste("Var", 1:10, sep = "")
data <- as.data.frame(data)
reg_name <- c("North", "South")
Region <- rep(reg_name, 5)
data <- cbind(data,Region)
使用beside = TRUE
,我能够创建一个分组条形图(按区域分类,从数据中分配Var1):
tb <- table(data$Var1,data$Region)
barplot(tb, main="Var1", xlab="Values", legend=rownames(tb), beside=TRUE,
col=c("green", "darkblue", "red"))
我想循环这个过程来生成例如Var1到Var10的10个图:
for(i in 1:10){
tb <- table(data[i], data$Region)
barplot(tb, main = i, xlab = "Values", legend = rownames(tb), beside = TRUE,
col=c("green", "darkblue", "red"))
}
R更喜欢apply
系列函数,因此我尝试创建一个要应用的函数:
fct <- function(i) {
tb <- table(data[i], data$Region)
barplot(tb, main=i, xlab="Values", legend = rownames(tb), beside = TRUE,
col=c("green", "darkblue", "red"))
}
sapply(data, fct)
我尝试过其他方法,但我从未成功过。也许lattice
或ggplot2
可以提供更简单的方法。我刚开始在R,我很乐意接受任何提示和建议。谢谢!
(我在Windows上运行,使用最新的Rv3.1.2&#34; Pumpking Helmet&#34;)
答案 0 :(得分:2)
鉴于您说&#34;我的目标是比较每个变量的区域差异&#34;,我不确定您是否选择了最佳绘图策略。但是,是的,你可以做你想要的事情。
以下是您使用上述代码获得的默认情节,供参考:
如果你想要一个包含每个变量10个图的列表,你可以执行以下操作(使用ggplot)
many_plots <-
# for each column name in dat (except the last one)...
lapply(names(dat)[-ncol(dat)], function(x) {
this_dat <- dat[, c(x, 'Region')]
names(this_dat)[1] <- 'Var'
ggplot(this_dat, aes(x=Var, fill=factor(Var))) +
geom_bar(binwidth=1) + facet_grid(~Region) +
theme_classic()
})
many_plots[[1]]
的示例输出:
如果你想要一张图片中的所有图,你可以这样做(使用reshape和data.table)
library(data.table)
library(reshape2)
dat2 <-
data.table(melt(dat, id.var='Region'))[, .N, by=list(value, variable, Region)]
ggplot(dat2, aes(y=N, x=value, fill=factor(value))) +
geom_bar(stat='identity') + facet_grid(variable~Region) +
theme_classic()
......但这不是一个很好的情节。