如何按条形计算堆叠条形图中的百分比?

马克·布林克曼

问题

条形图中的当前百分比是根据数据总量计算的。我希望每个堆栈都完全 100%。(解决了)

此外,百分比应四舍五入到最接近的整数。(解决了)

编辑:删除所有小于或等于 1 的百分比。(已解决)

Edit2:确保没有标签重叠。

我已经在谷歌上搜索了一段时间了。似乎没有适当的方法来防止标签重叠。

我发现的可能解决方案:

  • 翻转情节
  • 添加角度()以旋转标签
  • “手动”计算每个位置
  • 使用 check_overlap = TRUE

当前状态

当前状态

我的代码到目前为止

# Load libraries & packages =================================
library("ggplot2")
library("scales")
library("dplyr")
library("foreign")
library("tidyverse")
library("forcats")


# Data setup =================================
spss_file_path <- "D:\\Programming\\Testing\\2017-03-15_data_import&ggplot2\\Beispieldatensatz(fiktiv).sav"
exampledata <- read.spss(spss_file_path, use.value.labels = TRUE,
                         to.data.frame = TRUE, reencode = TRUE)


exampledata$V43   <- factor(exampledata$V43,
                            levels = c(1,2,3,4,5),
                            labels = c("1 Sehr zufrieden","2","3","4", "5 Sehr unzufrieden"))

exampledata$V43   <- factor(exampledata$V43, levels = rev(unique(levels(exampledata$V43))))
exampledata$A_REF <- factor(exampledata$A_REF, levels = rev(unique(levels(exampledata$A_REF))))
exampledata$V101  <- factor(exampledata$V101, levels = rev(unique(levels(exampledata$V101))))

labels <- exampledata %>% 
  filter(!is.na(V101), !is.na(V43)) %>% 
  count(A_REF) %>% 
  mutate(labels = paste(A_REF,"(n=", n, ")")) %>% 
  select(A_REF, labels)

plot_data <-  exampledata %>% 
  filter(!is.na(V101), !is.na(V43)) %>% 
  left_join(labels, by = "A_REF")

plot_data <- plot_data %>% 
  group_by(labels) %>% 
  summarize(`5 Sehr unzufrieden` = sum(ifelse(V43 == "5 Sehr unzufrieden", 1, 0)) / n(),
            `4` = sum(ifelse(V43 == "4", 1, 0)) / n(),
            `3` = sum(ifelse(V43 == "3", 1, 0)) / n(),
            `2` = sum(ifelse(V43 == "2", 1, 0)) / n(),
            `1 Sehr zufrieden` = sum(ifelse(V43 == "1 Sehr zufrieden", 1, 0)) / n()) %>%
  gather(key = Rating, value = prop, -labels)

plot_data$labels <- factor(plot_data$labels)
plot_data$Rating <- factor(plot_data$Rating) %>% fct_rev()

# Plot =================================
ggplot(plot_data, aes(x = labels, y = prop, fill = Rating)) +
  geom_col() + 
  scale_y_continuous(labels = scales::percent, breaks = c(0, 0.2, 0.4, 0.6, 0.8, 1)) +
  labs(y=NULL, x=NULL, fill=NULL) + 
  ggtitle(paste(attr(exampledata, "variable.labels")[77])) + 
  theme_classic() + 
  geom_text(aes(label = if_else(prop > 0.02, scales::percent(round(prop, 2)), NULL)), position = position_fill(vjust=0.5)) +
  coord_flip()

数据

structure(list(exampledata.V101 = structure(c(2L, NA, 2L, 2L, 
2L, 2L, 1L, 1L, 1L, 2L, 1L, 2L, 2L, NA, 2L, 2L, 2L, 1L, 2L, NA, 
NA, NA, 1L, 1L, 2L, NA, 2L, 2L, 2L, NA, 2L, 2L, NA, NA, 1L, NA, 
2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, NA, NA, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 2L, NA, 1L, NA, 1L, NA, 
1L, 2L, NA, NA, 2L, NA, 1L, 2L, 2L, NA, 2L, NA, 2L, 2L, 1L, 2L, 
1L, 2L, 1L, 1L, 2L, 1L, NA, 2L, 2L, 2L, 2L, NA, 2L, 1L, 2L, 2L
), .Label = c("Weiblich", "Männlich"), class = "factor"), exampledata.A_REF = structure(c(18L, 
18L, 18L, 18L, 18L, 17L, 18L, 18L, 18L, 18L, 18L, 18L, 16L, 18L, 
18L, 18L, 18L, 18L, 18L, 18L, 18L, 18L, 16L, 18L, 18L, 16L, 18L, 
16L, 18L, 18L, 17L, 18L, 18L, 18L, 18L, 18L, 18L, 18L, 18L, 18L, 
16L, 18L, 18L, 17L, 18L, 18L, 18L, 18L, 18L, 18L, 17L, 16L, 18L, 
18L, 18L, 18L, 18L, 18L, 18L, 18L, 18L, 18L, 18L, 17L, 18L, 18L, 
16L, 18L, 16L, 18L, 18L, 16L, 16L, 18L, 18L, 18L, 18L, 18L, 18L, 
18L, 17L, 18L, 18L, 18L, 18L, 18L, 18L, 18L, 18L, 18L, 16L, 18L, 
16L, 16L, 18L, 18L, 18L, 17L, 16L, 18L), .Label = c("Zertifikat eines Aufbau- oder Ergänzungsstudiums", 
"LA Berufliche Schulen", "LA Sonderschule", "LA Gymnasium", "LA Haupt- und Realschule", 
"LA Grundschule", "Künstlerischer/musischer Abschluss", "Kirchlicher Abschluss", 
"Staatsexamen (ohne Lehramt)", "Diplom Fachhochschule, Diplom I an Gesamthochschulen", 
"Diplom Universität, Diplom II an Gesamthochschulen", "Sonstiges", 
"Promotion", "Staatsexamen", "Magister", "Diplom", "Master", 
"Bachelor"), class = "factor"), exampledata.V43 = structure(c(3L, 
5L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 4L, 3L, 3L, 2L, NA, 4L, 5L, 5L, 
4L, 4L, 4L, 4L, NA, 2L, 4L, 3L, 5L, 4L, 4L, 4L, NA, 4L, 4L, NA, 
NA, 3L, 5L, 2L, 4L, 5L, 4L, 4L, 5L, 5L, 4L, NA, NA, 4L, NA, 3L, 
4L, 5L, 5L, 2L, 4L, 4L, 3L, 4L, 4L, 4L, 3L, 5L, 4L, 5L, NA, 4L, 
NA, 4L, NA, 4L, 5L, 4L, NA, 5L, NA, 4L, 4L, 4L, NA, 4L, NA, 5L, 
4L, 4L, 4L, 4L, 4L, 3L, 3L, 4L, 2L, 4L, 4L, 4L, 3L, 4L, NA, 4L, 
5L, 5L, 4L), .Label = c("5 Sehr unzufrieden", "4", "3", "2", 
"1 Sehr zufrieden"), class = "factor")), .Names = c("exampledata.V101", 
"exampledata.A_REF", "exampledata.V43"), row.names = c(NA, 100L
), class = "data.frame")
菲尔

通常最好在绘制图表之前将数据处理为汇总数据。我发现尝试ggplot2为你做总结要么有限,要么很难让它按照你想要的方式展示。

library(tidyverse)
library(forcats)

因为最好在将数据绘制在 中之前对其进行汇总ggplot2,所以下面的代码计算了每一组label在比例尺上选择特定答案的比例。在最后一步中,我将数据从宽变为长,以便所有要绘制的比例都在同一个变量中(我称之为prop)。

plot_data <- plot_data %>% group_by(labels) %>% 
            summarize(`5 Sehr unzufrieden` = sum(ifelse(V43 == "5 Sehr unzufrieden", 1, 0)) / n(),
                      `4` = sum(ifelse(V43 == "4", 1, 0)) / n(),
                      `3` = sum(ifelse(V43 == "3", 1, 0)) / n(),
                      `2` = sum(ifelse(V43 == "2", 1, 0)) / n(),
                      `1 Sehr zufrieden` = sum(ifelse(V43 == "1 Sehr zufrieden", 1, 0)) / n()) %>%
            gather(key = Rating, value = prop, -labels)

最好将分类变量设置为用于操作的因素,例如顺序和颜色,因此这就是以下内容。最初,我的代码的比例标签(我Ratinggather上面函数中调用)与您拥有的顺序相反,所以我使用fct_revforcats中将其反转回来。

plot_data$labels <- factor(plot_data$labels)
plot_data$Rating <- factor(plot_data$Rating) %>% fct_rev()

对于下面的图表,我只是做了一些更改。最值得注意的是我正在使用geom_col而不是geom_bar. 在后台,geom_colgeom_bar(stat = "identity")- 键入速度相同我们本质上是在告诉ggplot2按原样绘制数据图表,而不是将其视为原始数据。但是,我确实需要指定y美学以指示我想要绘制哪些数据,因此我指定prop在初始ggplot调用中使用该变量

# Plot =================================
ggplot(plot_data, aes(x = labels, y = prop, fill = Rating)) +
geom_col() + 
scale_y_continuous(labels = scales::percent, breaks = c(0, 0.2, 0.4, 0.6, 0.8, 1)) +
labs(y=NULL, x=NULL, fill=NULL) + 
ggtitle(paste(attr(exampledata, "variable.labels")[77])) + 
theme_classic() + 
geom_text(aes(label = if_else(prop > 0.01, scales::percent(round(prop, 2)), NULL)), position = position_fill(vjust=0.5)) +
coord_flip()

我更改的唯一另一行是geom_text上面调用。我添加了一个if_else函数,以便它要么显示标签(如果它高于 1%)要么不显示(1% 或更少)。此外,我对百分比进行了四舍五入,以便您使用该round函数时没有任何小数请记住,您需要四舍五入到小数点后两位。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在条形上方的堆叠条形图中添加百分比标签

来自分类Dev

堆叠的ggplot百分比条形图在闪亮

来自分类Dev

在带有双Y轴的堆叠条形图中显示数字和百分比

来自分类Dev

如何在R中将标签作为百分比添加到栅格堆叠的条形图中?

来自分类Dev

如何在条形图中每个条形显示总数的百分比 Tableau

来自分类Dev

Python:在条形图中绘制百分比

来自分类Dev

条形图中的百分比标签

来自分类Dev

如何在堆叠的条形图ggplot2上方组织百分比值

来自分类Dev

如何居中堆叠百分比条形图标签居中

来自分类Dev

R在堆叠条形图中仅在堆叠百分比值大于5的情况下仅显示标签

来自分类Dev

如何在谷歌条形图中显示百分比?

来自分类Dev

如何在每个图例的条形图中绘制百分比标签?

来自分类Dev

如何显示百分比和条形图

来自分类Dev

有没有办法在Quickbase中显示堆叠条形图中的数量和百分比?

来自分类Dev

如何使用分组条形图创建百分比条形图?

来自分类Dev

如何在ggplot2中绘制堆叠的条形图,以显示基于组的百分比?

来自分类Dev

如何在ggplot2中绘制堆叠的条形图,以显示基于组的百分比?

来自分类Dev

如何使用给定的特定数据结构绘制百分比堆叠的条形图

来自分类Dev

在R中作图:如何在时间序列数据中绘制堆叠的条形图以显示百分比构成?

来自分类Dev

如何创建频率堆叠的条形图,但是条形图上的百分比标签和y轴上的频率在R中?

来自分类Dev

在堆叠的条形图(ggplot2)中标记所选百分比值

来自分类Dev

如何在R中的计数ggplot条形图中添加一个变量的百分比

来自分类Dev

用不同变量的数据在条形图中绘制百分比

来自分类Dev

在条形图中添加百分比标签(gglot2)

来自分类Dev

在dimple.js垂直100%条形图中获取正确的百分比

来自分类Dev

如何在excel中的简单条形图中添加百分比。数据是单元格中的一系列字符串,我希望条形图显示百分比而不是计数

来自分类Dev

如何在百分比条形图上方添加百分比或计数标签?

来自分类Dev

ggplot条形图百分比组

来自分类Dev

堆积条形图百分比

Related 相关文章

  1. 1

    在条形上方的堆叠条形图中添加百分比标签

  2. 2

    堆叠的ggplot百分比条形图在闪亮

  3. 3

    在带有双Y轴的堆叠条形图中显示数字和百分比

  4. 4

    如何在R中将标签作为百分比添加到栅格堆叠的条形图中?

  5. 5

    如何在条形图中每个条形显示总数的百分比 Tableau

  6. 6

    Python:在条形图中绘制百分比

  7. 7

    条形图中的百分比标签

  8. 8

    如何在堆叠的条形图ggplot2上方组织百分比值

  9. 9

    如何居中堆叠百分比条形图标签居中

  10. 10

    R在堆叠条形图中仅在堆叠百分比值大于5的情况下仅显示标签

  11. 11

    如何在谷歌条形图中显示百分比?

  12. 12

    如何在每个图例的条形图中绘制百分比标签?

  13. 13

    如何显示百分比和条形图

  14. 14

    有没有办法在Quickbase中显示堆叠条形图中的数量和百分比?

  15. 15

    如何使用分组条形图创建百分比条形图?

  16. 16

    如何在ggplot2中绘制堆叠的条形图,以显示基于组的百分比?

  17. 17

    如何在ggplot2中绘制堆叠的条形图,以显示基于组的百分比?

  18. 18

    如何使用给定的特定数据结构绘制百分比堆叠的条形图

  19. 19

    在R中作图:如何在时间序列数据中绘制堆叠的条形图以显示百分比构成?

  20. 20

    如何创建频率堆叠的条形图,但是条形图上的百分比标签和y轴上的频率在R中?

  21. 21

    在堆叠的条形图(ggplot2)中标记所选百分比值

  22. 22

    如何在R中的计数ggplot条形图中添加一个变量的百分比

  23. 23

    用不同变量的数据在条形图中绘制百分比

  24. 24

    在条形图中添加百分比标签(gglot2)

  25. 25

    在dimple.js垂直100%条形图中获取正确的百分比

  26. 26

    如何在excel中的简单条形图中添加百分比。数据是单元格中的一系列字符串,我希望条形图显示百分比而不是计数

  27. 27

    如何在百分比条形图上方添加百分比或计数标签?

  28. 28

    ggplot条形图百分比组

  29. 29

    堆积条形图百分比

热门标签

归档