在循环中绘制多个分组条形图[R]

在循环中绘制多个分组条形图[R],r,loops,bar-chart,R,Loops,Bar Chart,我的挑战是一次绘制几个条形图,不同子集的每个变量的一个图。我的目标是比较每个变量的地区差异。我想通过R标记将所有生成的绘图打印到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)),

我的挑战是一次绘制几个条形图,不同子集的每个变量的一个图。我的目标是比较每个变量的地区差异。我想通过R标记将所有生成的绘图打印到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)
我想循环这个过程,为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"))
     }
我尝试过其他方法,但从未成功过。也许
lattice
ggplot2
会提供更简单的方法。我刚开始在R,我很乐意接受任何提示和建议。谢谢大家!

(我在Windows上运行,使用最新的Rv3.1.2“南瓜头盔”)

如果您说“我的目标是比较每个变量的区域差异”,我不确定您是否选择了最佳绘图策略。但是,是的,你可以按你的要求去做

以下是使用上述代码获得的默认绘图,以供参考:

如果您想为每个变量创建一个包含10个图的列表,可以执行以下操作(使用ggplot)


…但这不是一个很好的情节。

谢谢Arvi的建议。我更喜欢“多个图”选项,但是我不知道变量的名称或数量(VarX)。我尝试了title=paste(names[I]),但没有成功。另外一个问题是:似乎我所在的地区有非常不同的计数。最好绘制等于每个值的区域百分比。我试图使用“prop.table”…1)因为上面的代码在变量名称上使用了
lappy
,所以您可以使用
ggtitle(x)
2)修改
this\u dat
以显示比例,然后使用
geom\u bar(stat='identity')进行绘图。
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"))
     }
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)
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()
  })
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()