R 将标签添加到ggplot堆叠条形图中的整个条形图
我有一些关于个人同意/不同意某些陈述的调查数据。我想从这些数据基本上制作一个堆叠的条形图,其中条形图表示语句,每个条形图中的不同部分表示每个级别的响应百分比 鉴于我的数据的结构方式(下面包括示例数据),我可以使用以下代码创建这种类型的图表:R 将标签添加到ggplot堆叠条形图中的整个条形图,r,ggplot2,R,Ggplot2,我有一些关于个人同意/不同意某些陈述的调查数据。我想从这些数据基本上制作一个堆叠的条形图,其中条形图表示语句,每个条形图中的不同部分表示每个级别的响应百分比 鉴于我的数据的结构方式(下面包括示例数据),我可以使用以下代码创建这种类型的图表: ggplot(data=data, aes(x = items)) + geom_bar(aes(fill = answer), position = "fill") + coord_flip() + guides(fill = guide_le
ggplot(data=data, aes(x = items)) +
geom_bar(aes(fill = answer), position = "fill") +
coord_flip() +
guides(fill = guide_legend(reverse = TRUE))
我想用这个图表更进一步,并将同意或强烈同意每个陈述的人的百分比作为每个栏上的标签。我不想要每个级别的百分比
我希望我的图表如下所示:
data %>%
mutate(answer = recode_factor(answer,
"Strongly Agree" = "Agree",
"Strongly Disagree" = "Disagree")) %>%
group_by(items) %>%
summarise(agree = sum(answer == 'Agree'), disagree = sum(answer == 'Disagree')) %>%
mutate(percent_agree = agree / (agree + disagree)) %>%
select(items, percent_agree)
我可以这样计算百分比:
data %>%
mutate(answer = recode_factor(answer,
"Strongly Agree" = "Agree",
"Strongly Disagree" = "Disagree")) %>%
group_by(items) %>%
summarise(agree = sum(answer == 'Agree'), disagree = sum(answer == 'Disagree')) %>%
mutate(percent_agree = agree / (agree + disagree)) %>%
select(items, percent_agree)
但是,我不知道如何将它与正确的语句&bar匹配起来。在绘制之前,我尝试将汇总百分比agree/strongly agree(同意/强烈同意)加入原始数据,并使用标签选项,但这并没有达到预期效果
如何将“同意/强烈同意”百分比作为标签添加到图表中?
数据
有点老套,但能完成任务:
代码
我利用“同意”的因子水平来绘制其累积百分比。您还可以看到,您的数据经过了一些重塑,以使处理变得更容易,但在运行时对原始数据集进行争用通常也可以得到相同的结果。只是不太好看
资料
d%
#重塑为更易于管理的格式
分组依据(项目,答案)%>%
汇总(n=n())%>%
解组()%>%
#加上累计百分比
分组依据(项目)%>%
突变(cumperc=cumsum(n)/sum(n))%>%
解组()%>%
#为美观起见,在项目中添加换行符
突变(items=gsub(“到an”,“到an”\n“,items),
items=gsub(“条款变更”,“条款变更\n”,items))
>总目(d)
#一个tibble:6x4
康珀尔酒店
1强烈采用新技术…6 0.122
2采用新技术同意24 0.612
3采用新技术1
4“进行更改以响应\n存在…强烈…9 0.184
5“进行更改以响应\n存在…同意34 0.878
6“进行更改以响应\n存在…不同意6 1
ggplot(data = d, aes(x = items, y = n)) +
geom_col(aes(fill = answer), position = "fill") +
coord_flip() +
geom_label(aes(items, Inf,
label = ifelse(answer == "Agree", scales::percent(cumperc), NA),
hjust = 1,
vjust = 1)) +
guides(fill = guide_legend(reverse = TRUE))
d <- data %>%
# reshape into a more manageable format
group_by(items, answer) %>%
summarize(n = n()) %>%
ungroup() %>%
# add cumulative percentages
group_by(items) %>%
mutate(cumperc = cumsum(n)/sum(n)) %>%
ungroup() %>%
# add line breaks to the items for aesthetic reasons
mutate(items = gsub("to an", "to an\n", items),
items = gsub("term changes", "term changes\n", items))
> head(d)
# A tibble: 6 x 4
items answer n cumperc
<chr> <ord> <int> <dbl>
1 Adopts new technologies Strongly … 6 0.122
2 Adopts new technologies Agree 24 0.612
3 Adopts new technologies Disagree 19 1
4 "Makes changes to respond to an\n exist… Strongly … 9 0.184
5 "Makes changes to respond to an\n exist… Agree 34 0.878
6 "Makes changes to respond to an\n exist… Disagree 6 1