Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.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 将标签添加到ggplot堆叠条形图中的整个条形图_R_Ggplot2 - Fatal编程技术网

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