创建多个2列条形图,根据循环中的所有因子绘制特定因子

时间:2018-03-13 02:06:10

标签: r ggplot2

我有一个包含4列的数据框。第一,第二,第三和第四列分别详细说明了不同的位置(因素),成功次数,尝试次数和成功百分比(第二列/第三列* 100)。

数据如下所示:

location <- c("a", "b", "c", "d", "e")
success <- c(12, 40, 30, 10, 20)
attempts <- c(20, 54, 32, 12, 26)
perc_success <- c(60, 74, 94, 83, 76)
df <- as.data.frame(cbind(location, success, attempts, perc_success))

我想循环创建多个2列条形图,将特定位置的成功百分比与所有位置的平均成功百分比进行对比。

意思是,我想要一个有两列的条形图,其中x轴包含位置“A”和位置“所有位置”,y轴显示位置“A”和位置的成功百分比所有地点。“

我想循环上面的相同过程并创建另一个条形图,针对所有位置绘制位置B,针对所有位置绘制位置C等。

我现在正在做的是在将excel数据导入R之前手动计算“所有位置”行,然后手动将每个位置绘制在所有位置。

请参阅下面的链接,了解我要查找的所需输出(在这种情况下,位置A针对所有位置)。

提前致谢!

Barplot Example: Location A against all Locations

1 个答案:

答案 0 :(得分:1)

library(ggplot2)

location <- c("a", "b", "c", "d", "e")
success <- c(12, 40, 30, 10, 20)
attempts <- c(20, 54, 32, 12, 26)
perc_success <- c(60, 74, 94, 83, 76)
df <- as.data.frame(cbind(location, success, attempts, perc_success))

#Calculate average value
avg <- mean(perc_success)

#Create list to store plots in
plotvec<-vector("list",length=5)

for(i in c(1:5)){
  #Create a burner data frame with only the relevant data
  burner <- data.frame(c(paste(location[i]),"avg"),c(perc_success[i],avg))
  names(burner) <- c("location","perc_success")

  #Create a plot from that buner data frame
  plot <- ggplot(data=burner,aes(y=perc_success,x=location)) +
    geom_bar(stat="identity")

  #Store plot in list
  plotvec[[i]]<-plot
}

#Display all plots
plotvec

这有帮助吗?如有任何问题,请随时回复。