在组内添加百分比标签,用于前后笼子式数据ggplot BARCPLOT

在组内添加百分比标签,用于前后笼子式数据ggplot BARCPLOT,r,ggplot2,geom-bar,R,Ggplot2,Geom Bar,我是R新手,在将百分比标签添加到柱状图之前遇到了一些问题。数据与此类似: pre<-c("yes", "no", "no", "maybe", "yes", "yes", "no", "yes", "yes", "yes") post<-c("no", "no", "maybe", "yes", "no", "no", "no", "yes", "no", "maybe") dat<-as.data.frame(cbind(pre,post) 它生成了这个图: [图前/图后]

我是R新手,在将百分比标签添加到柱状图之前遇到了一些问题。数据与此类似:

pre<-c("yes", "no", "no", "maybe", "yes", "yes", "no", "yes", "yes", "yes")
post<-c("no", "no", "maybe", "yes", "no", "no", "no", "yes", "no", "maybe")
dat<-as.data.frame(cbind(pre,post)
它生成了这个图: [图前/图后][1] 抱歉,我是新来的,它还不允许我发布图片


我希望做的是将组内百分比文本添加到每个条上进行比较,因此所有“前”条加起来都是100%,所有“后”条加起来都是100%,但我发现的大部分内容都在整个数据集的每个条上提供了百分比文本,而不是在每个组内。我希望这是有道理的。谢谢你的帮助

一种方法是在
ggplot
之外创建一列,该列将提供每个变量的累积和。因此,除了您创建的
value\u ordered
列之外,您还可以为计数和累积计数添加新列,如下所示:

library(tidyr)
图书馆(dplyr)
d%pivot\u更长(everythings(),names\u to=“names”,values\u to=“values”)%>%
变异(值=因子(值、级别=c(“否”、“可能”、“是”))%>%
分组依据(名称、值顺序)%>%汇总(计数=n())%>%
变异(百分比=计数/总和(计数)*100)
#一个tibble:6x4
#组:名称[2]
名称值\u顺序计数百分比
1第6号职位60
2个帖子可能是220
3是2 20
4预3 30
5年前也许110年
6是前6 60
现在,您可以使用此列
CumPer
作为以下代码中直方图每个条的标签:

库(ggplot2)
图书馆(比例尺)
ggplot(d,aes(x=值,y=百分比/100,填充=名称,标签=粘贴(百分比,“%”))+
几何图形栏(stat=“identity”,position=position\u dodge())+
几何图形文字(位置=位置减淡(.9),矢量=-0.5)+
比例y连续(标签=百分比)+
xlab(“前/后”)+ylab(“”)+
主题(axis.text.x=element\u text(角度=60,hjust=1),legend.title=element\u blank())

它看起来像您期望的吗?

一种方法是在
ggplot
之外创建一列,以提供每个变量的累积和。因此,除了您创建的
value\u ordered
列之外,您还可以为计数和累积计数添加新列,如下所示:

library(tidyr)
图书馆(dplyr)
d%pivot\u更长(everythings(),names\u to=“names”,values\u to=“values”)%>%
变异(值=因子(值、级别=c(“否”、“可能”、“是”))%>%
分组依据(名称、值顺序)%>%汇总(计数=n())%>%
变异(百分比=计数/总和(计数)*100)
#一个tibble:6x4
#组:名称[2]
名称值\u顺序计数百分比
1第6号职位60
2个帖子可能是220
3是2 20
4预3 30
5年前也许110年
6是前6 60
现在,您可以使用此列
CumPer
作为以下代码中直方图每个条的标签:

库(ggplot2)
图书馆(比例尺)
ggplot(d,aes(x=值,y=百分比/100,填充=名称,标签=粘贴(百分比,“%”))+
几何图形栏(stat=“identity”,position=position\u dodge())+
几何图形文字(位置=位置减淡(.9),矢量=-0.5)+
比例y连续(标签=百分比)+
xlab(“前/后”)+ylab(“”)+
主题(axis.text.x=element\u text(角度=60,hjust=1),legend.title=element\u blank())

它看起来像你期望的吗?

你可以按照链接中给出的说明上传图像:你可以按照链接中给出的说明上传图像:我想你想要
label=paste(Percent,“%”)
(而不是
CumPer
)我想OP想要每个组的标签“总计100”,这就是为什么我提出了一个百分比的累积总和。但也许我误解了预期的结果。谢谢你的回复!这很接近-百分比文本是我在视觉上寻找的,但实际的数字加起来不-前加起来有170%。我希望显示与条形图对应的前后数据中“否”、“是”和“可能”回答的百分比差异。例如,“post,maybe”响应文本将是20%,而不是80%。是的!使用标签=粘贴(百分比,“%”)有效。非常感谢大家!抱歉,还有一个问题。我刚刚在我的数据集上尝试了这个方法,效果很好,只是它给出了大约15个有效数字的百分比标签。有没有办法把数字限制在4位?我想你想要
label=paste(Percent,“%”)
(而不是
CumPer
)我想OP想要每组标签“加起来100”,所以我建议将百分比加起来。但也许我误解了预期的结果。谢谢你的回复!这很接近-百分比文本是我在视觉上寻找的,但实际的数字加起来不-前加起来有170%。我希望显示与条形图对应的前后数据中“否”、“是”和“可能”回答的百分比差异。例如,“post,maybe”响应文本将是20%,而不是80%。是的!使用标签=粘贴(百分比,“%”)有效。非常感谢大家!抱歉,还有一个问题。我刚刚在我的数据集上尝试了这个方法,效果很好,只是它给出了大约15个有效数字的百分比标签。有没有办法将数字限制为4?
dat %>%
  gather(key,value) %>%
  mutate(value_ordered=factor(value, levels=c("no", "maybe","yes"))) %>%
  ggplot(aes(x=value_ordered,fill=key)) +
  geom_bar(aes(y=(..count../sum(..count..))), position = "dodge") +
  scale_y_continuous(label=percent) +
  xlab("Pre/post") + ylab("") +
  theme(axis.text.x=element_text(angle=60, hjust=1), legend.title=element_blank())