【问题标题】:barplot of percentages per category, per variable每个类别,每个变量的百分比条形图
【发布时间】:2013-02-27 17:12:49
【问题描述】:

给出以下示例数据:

df<-data.frame(cbind(cntry<- c("BE","ES","IN","GE","BE","ES","GE",NA,"IN","IN"),
gndr<- c(NA,1,2,2,2,2,1,1,1,2),
plcvcrcR<-c(0,1,NA,0,0,1,1,1,0,0),
plcpvcrR<-c(0,1,1,1,NA,0,0,0,0,0),
plccbrgR<- c(0,1,0,NA,0,1,0,1,1,0),
plcarcrR<-c(1,0,0,NA,1,0,1,0,0,0),
plcrspcR<-c(1,1,0,0,0,0,0,1,1,NA)))
colnames(df)<- c("cntry", "gndr", "plcvcrcR", "plcpvcrR", "plccbrgR", "plcarcrR", "plcrspcR")
df

我如何制作条形图,例如为每个性别 (gndr) 显示变量 plcpvcrRplccbrgRplcarcrR1-values 的百分比?最好将每种性别的条形图分组,并为不同的变量使用不同的颜色。

类似于这张图片,其中一种颜色代表问题,组代表性别(​​没有置信区间):

https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcSsAlUJsqdhxXHiY35FxFmVx3BREVji_ca24w9ub_OYEfZ3O50X5Q

我已经尝试过以下功能,我知道它有很多缺陷:

barplot(((colSums(df[c(3:5)], na.rm=TRUE)/nrow(df[c(3:5)]))*100)~gndr)

【问题讨论】:

  • 你想怎么处理NA
  • 我想只计算有效百分比(即从总数中省略NA)。
  • NA 的性别怎么样?你想绘制1, 2 and NA吗?当您的意思是从总计中省略 NA 时,您的意思是在除以总计时,不应该包括 NA?
  • 不,我想绘制 1 和 2,而不是 NA 的性别。是的,我的意思是,NA 除以总数时不应包括在内。
  • 好的,很好。我希望我做对了。看看剧情吧。

标签: r plot ggplot2


【解决方案1】:

我会这样做:

require(ggplot2)
require(reshape2)
require(scales)
require(plyr)

# remove NA from gndr
df <- df[!is.na(df$gndr), ]
# now get percentages
df.o <- ddply(df, .(gndr), summarise, 
              plcpvcrR = sum(plcpvcrR == 1, na.rm = T)/sum(!is.na(plcpvcrR)), 
              plccbrgR = sum(plccbrgR == 1, na.rm = T)/sum(!is.na(plccbrgR)), 
              plcrspcR = sum(plcrspcR == 1, na.rm = T)/sum(!is.na(plcrspcR)))
# melt it:
df.m <- melt(df.o, id.var = "gndr")

# plot it:
ggplot(data = df.m, aes(x=gndr)) + geom_bar(aes(weights=value, fill=variable), 
      position = "dodge") + scale_y_continuous(labels=percent)

可能有更简单/直接的方法来获取百分比。剧情如下:

【讨论】:

    猜你喜欢
    • 2019-09-05
    • 1970-01-01
    • 1970-01-01
    • 2018-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-22
    • 1970-01-01
    相关资源
    最近更新 更多