Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用R的ggplot2包在堆叠条形图中添加文本?_R_Ggplot2_Geom Text - Fatal编程技术网

如何使用R的ggplot2包在堆叠条形图中添加文本?

如何使用R的ggplot2包在堆叠条形图中添加文本?,r,ggplot2,geom-text,R,Ggplot2,Geom Text,我正在分析一份5点Likert量表问卷,并试图使用R的ggplot2可视化一个堆叠的条形图 可在此链接中找到数据集- 我的数据集是.sav(SPSS)格式的 因此,我按照以下代码读取这些数据: require("foreign") d = read.spss(file.choose(), to.data.frame=TRUE) attach(d) 现在,为了将这个5点Likert标尺绘制成堆叠条形图,我使用了tidyverse软件包,其中包括ggplot2 require(

我正在分析一份5点Likert量表问卷,并试图使用R的ggplot2可视化一个堆叠的条形图

可在此链接中找到数据集-

我的数据集是.sav(SPSS)格式的

因此,我按照以下代码读取这些数据:

require("foreign")
d = read.spss(file.choose(), to.data.frame=TRUE)
attach(d)
现在,为了将这个5点Likert标尺绘制成堆叠条形图,我使用了
tidyverse
软件包,其中包括
ggplot2

require("tidyverse")
d %>% select(F1:F6) %>% na.omit %>% nrow
d %>% select(F1:F6) %>% na.omit -> f_items
f_items %>% gather(key = items, value = answer) %>% mutate(answer = factor(answer),items = factor(items)) -> data2
为了重新排列图例的键,我使用了以下代码:

data2$answer = factor(data2$answer, levels = c("Strongly Agree", "Agree", "Neutral",
                                           "Disagree", "Strongly Disagree"))
ggplot(data2, aes(x = items)) +
geom_bar(aes(fill = answer), position = "fill") +
coord_flip() +
scale_x_discrete(limits = rev(levels(data2$items)))+
scale_y_continuous(labels = scales::percent)+
scale_fill_brewer(palette="RdYlBu")-> p2
p2
然后,我使用以下代码创建了堆叠条形图:

data2$answer = factor(data2$answer, levels = c("Strongly Agree", "Agree", "Neutral",
                                           "Disagree", "Strongly Disagree"))
ggplot(data2, aes(x = items)) +
geom_bar(aes(fill = answer), position = "fill") +
coord_flip() +
scale_x_discrete(limits = rev(levels(data2$items)))+
scale_y_continuous(labels = scales::percent)+
scale_fill_brewer(palette="RdYlBu")-> p2
p2
这些代码生成此图:

现在我想添加每个问题回答的百分比,如下图所示,但无法管理代码:

我怎样才能把问题回答的百分比加在一起,比如这个数字?这对我会有很大的帮助


-抖动

您可以尝试下一个代码。最好按照@Axeman早些时候告诉您的那样处理数据,以获得标签和比例:

library(foreign)
library(tidyverse)
#Data
d = read.spss(file.choose(), to.data.frame=TRUE)
attach(d)
#Process
d %>% select(F1:F6) %>% na.omit %>% nrow
d %>% select(F1:F6) %>% na.omit -> f_items
f_items %>% gather(key = items, value = answer) %>% mutate(answer = factor(answer),items = factor(items)) -> data2
#Assign factor
data2$answer = factor(data2$answer, levels = c("Strongly Agree", "Agree", "Neutral",
                                               "Disagree", "Strongly Disagree"))
#Some code for proportions and labels
data2 %>% group_by(items,answer) %>% summarise(freq=n()) %>% ungroup() %>%
  group_by(items) %>% mutate(total = sum(freq),prop = freq/total) -> labdf
labdf %>% ungroup() -> labdf
#Create label
labdf$Label <- ifelse(labdf$prop<0.06,NA,paste0(100*round(labdf$prop,3),'%'))
#Plot
ggplot(labdf, aes(x = items, y = prop,group=answer))+
  geom_bar(stat='identity',aes(fill = answer), position = 'fill')+
  geom_text(aes(label = Label),position = position_fill(vjust = 0.5),size=3)+
  coord_flip() +
  scale_x_discrete(limits = rev(levels(data2$items)))+
  scale_y_continuous(labels = scales::percent)+
  scale_fill_brewer(palette="RdYlBu")-> p2
p2
库(外文)
图书馆(tidyverse)
#资料
d=read.spss(file.choose(),to.data.frame=TRUE)
附(d)
#过程
d%%>%选择(F1:F6)%%>%na。忽略%>%N现在
d%%>%选择(F1:F6)%%>%na.omit->f\U项目
f_items%%>%聚集(key=items,value=answer)%%>%变异(answer=factor(answer),items=factor(items))->data2
#分配因子
data2$answer=系数(data2$answer,等级=c(“强烈同意”、“同意”、“中立”),
“不同意”、“强烈不同意”))
#比例和标签的一些代码
数据2%%>%分组依据(项目,答案)%%>%总结(频率=n())%%>%ungroup()%%
分组依据(项目)%>%mutate(总数=总和(频率),属性=频率/总数)->labdf
labdf%>%ungroup()->labdf
#创建标签

labdf$Label请参阅,例如,或许多类似问题。非常感谢。我完全错过了关于比例和百分比部分的数据争论。再次感谢你为我指路。这对我帮助很大。