ggplot barplot - y轴上的百分比

时间:2016-07-13 10:14:03

标签: r ggplot2 bar-chart

所以,我的数据集看起来像这样:

id  group   age length  Bnull_subject   Bnull_object    Bnull_other
1   NS  23  NA  3   3   1
2   NS  23  NA  1   4   0
3   NS  58  NA  4   4   1
4   NS  24  NA  2   3   1
5   NS  32  NA  3   2   0
6   NS  24  NA  4   1   1
7   NS  25  NA  5   2   0
8   NS  24  NA  3   2   0
9   NS  25  NA  3   2   0
22  ATT 26  [5-7]   4   4   0
23  ATT 28  [5-7]   4   1   0
24  ATT 28  [5-7]   5   3   1
25  ATT 28  [5-7]   1   5   1
26  ATT 26  [5-7]   4   2   0
27  ATT 29  [5-7]   3   2   0

我正在尝试用yg轴上的ggplot创建一个条形图,但由于某些原因我无法正常工作..这是我使用的代码

dset.bnull <- subset(dset, select = c(group, length, Bnull_subject, Bnull_object, Bnull_other))


    library(reshape2)
    library(ggplot2)
    library(scales)
mdat <- melt(dset.bnull[c(1,3:5)], id.vars="group") #?melt <- Converts an object into a molten data frame

head(mdat) #Shows top observations of your data

ggplot(mdat, aes(variable, value, fill = group)) +  
  geom_bar(aes(y = (value)/sum(value)), stat = "identity", position=position_dodge(1)) + 
  scale_y_continuous(labels = percent) + #Use percentage on y axis
  xlab("Referent") + #Rename x axis
  ylab("Percentage of Answers") + #Rename y axis
  guides(fill=guide_legend(title="Experimental \nGroup"))

我得到的情节是......(显然这是错误的)

enter image description here

关于我应该做什么的任何帮助?

提前谢谢

1 个答案:

答案 0 :(得分:0)

我认为你的melt错了。

尝试

mdat <- melt(dset.bnull[c(1:2, 5:7)], id.vars=c("id", "group"))

并删除

position=position_dodge(1)

来自geom_bar来电。

更新:根据您的评论,我猜你很自在地使用dplyr。在总结数据后进行绘图会更直观。

plot_data = mdat %>% group_by(group, variable) %>% summarise(total = sum(value))

ggplot(plot_data, aes(fill = group)) +  
  geom_bar(aes(x = variable, 
               y = (total)/sum(total)), 
               stat = "identity", 
               position = "dodge") + 
  scale_y_continuous(labels = percent) + 
  xlab("Referent") + 
  ylab("Percentage of Answers") + 
  guides(fill=guide_legend(title="Experimental \nGroup"))