R - For循环仅绘制来自一个滤波值的数据,尽管正确计算每个滤波值的数据帧

时间:2018-04-05 04:53:47

标签: r ggplot2

我试图根据主数据表生成一系列条形图,每个条形图对应7个省份。但是,该软件仅绘制来自其中一个省的数据 - 省4.当我导出为PDF时,我得到7个相同的条形图(具有不同的标题)。

数据格式为(缩写为清晰)

province      travelcat pc_pop
60        1   0 to 4 hours 0.6807
21        1   4 to 8 hours 0.1093
28        2   4 to 8 hours 0.0969
44        2 36 to 48 hours 0.0014
31        3 48 to 72 hours 0.0016
49        3     > 72 hours 0.0007

奇怪的是,当我生成一个过滤后的表格prov_filter并打印出来时,它会完全按照我所期望的那样显示数据,特定于每个省份。同样,在生成的PDF打印输出中正确分配了省标题province_number。所以过滤正在发生......但数据并没有进入图中。

province_list=list()

for (i in unique(slim_prov_TCR$province)) {

  province_number <- paste("Province",i)

  prov_filter <- filter(slim_prov_TCR, province == i)

  print(prov_filter)

  plot <- ggplot(prov_filter, aes(x = prov_filter$travelcat, y = prov_filter$pc_pop)) 
  + theme(axis.text.x = element_text(angle=45, hjust=1)) 
  + scale_y_continuous(limits=c(0,1),labels = scales::percent) 
  + ylab("% of provincial population") + xlab("Travel time to nearest medical facility") 
  + ggtitle(province_number) 
  + stat_summary(fun.y="identity",geom="bar")

  filename=paste(province_number,".pdf",sep="")

  province_list[[i]] = plot
  print(plot)

}

我在使用类似代码之前没有遇到任何问题,但是这次我遇到了串行问题,尽管使用多种方法修改了过滤器代码。对于R和统计数据来说,我相对较新,所以我可能会在语法方面捣乱。任何和所有帮助表示赞赏。

供参考,最终打印输出代码如下

for (i in unique(slim_prov_TCR$province)) { # Another for loop, this time to save out the bar charts in province_list as PDFs
    province_number <- paste("Province",i)

    filename=paste(province_number,".pdf",sep="") # Make the file name for each PDF. The paste makes the name a variable of the disrict, so each chart is named by sensor

    pdf(filename,width=3.5,height=3.5) # PDF basic specifications. Modify the width and height here.

    print(province_list[[i]])

    dev.off()
}

1 个答案:

答案 0 :(得分:0)

正如alistaire和Gregor所强调的那样,对于类别使用$并且在行的开头使用+令人困惑R.重新格式化这两个点就行了。见下文。

province_list=list()

for (i in unique(slim_prov_TCR$province)) {

  province_number <- paste("Province",i)

  prov_filter <- filter(slim_prov_TCR, province == i)

  print(prov_filter)

  plot <- ggplot(prov_filter, aes(x = travelcat, y = pc_pop)) +
    theme(axis.text.x = element_text(angle=45, hjust=1)) +
    scale_y_continuous(limits=c(0,1),labels = scales::percent) +
    ylab("% of provincial population") + xlab("Travel time to nearest medical facility") +
    ggtitle(province_number) +
    stat_summary(fun.y="identity",geom="bar")

  filename=paste(province_number,".pdf",sep="")

  province_list[[i]] = plot
  print(plot)

}