在分类变量图表中显示百分比 % 而不是计数,但在一个图中显示多个变量
Show percent % instead of counts in charts of categorical variables but with multiple variables in one plot
在
Show percent % instead of counts in charts of categorical variables
他们讨论了如何在分类变量图表中显示百分比而不是计数。我基本上想做同样的事情,但在一个图中总结和比较多个变量。将上述 post 的解决方案应用于我的绘图时,它似乎计算了整个数据集中观察值的百分比,而不是整个变量中观察值的百分比。有谁知道如何解决这个问题?
ggplot(subset(tidyr::pivot_longer(MD3[1:6], 1:6), !is.na(value)),aes(y = value, fill = name)) +
geom_bar(position = 'dodge') +
scale_colour_viridis_d(aesthetics = "fill") +
theme_light()+
labs(x = "Anzahl", y ="", fill = 'Vielfalt im Bezug auf:')
ggplot(subset(tidyr::pivot_longer(MD3[1:6], 1:6), !is.na(value)),
aes(y = value, fill = name)) +
geom_bar(aes(x = (..count..)/sum(..count..)*100), position = 'dodge') +
scale_colour_viridis_d(aesthetics = "fill") +
theme_light()+
labs(x = "Anteil in %", y ="", fill = 'Vielfalt im Bezug auf:')
structure(list(Alter = structure(c(3L, 4L, 4L, 5L, 4L, 5L, 5L,
4L, 5L, 4L, 4L, 4L, 3L, 4L, 5L, 4L, 6L, 4L, 5L, 3L, 3L, 5L, 4L,
5L, 4L, 1L, 3L, 5L, 3L, 2L, 3L, 3L, 5L, 5L, 4L, 5L, 3L, 4L, 3L,
1L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 2L, 5L, 3L, 5L, 5L, 5L, 5L,
2L, 4L, 4L, 2L, 3L, 4L, 5L, 5L, 4L, 4L, 5L, 3L, 5L, 2L, 4L, 4L,
5L, 4L, 4L, 5L, 5L, 4L, 3L, 5L, 5L, 5L, 4L, 5L, 3L), .Label = c("Nicht vielfältig",
"Eher nicht vielfältig", "Teilweise vielfältig", "Eher vielfältig",
"Sehr vielfältig", "k. A."), class = c("ordered", "factor")),
Bildung = structure(c(4L, 1L, 3L, 5L, 5L, 5L, 4L, 4L, 5L,
4L, 3L, 3L, 3L, 4L, 4L, 2L, 4L, 3L, 5L, 3L, 4L, 5L, 4L, 5L,
4L, 4L, 2L, 4L, 4L, 2L, 3L, 5L, 4L, 5L, 3L, 5L, 3L, 5L, 3L,
4L, 3L, 3L, 3L, 5L, 4L, 3L, 2L, 5L, 4L, 4L, 4L, 5L, 5L, 5L,
5L, 5L, 6L, 4L, 3L, 6L, 3L, 5L, 3L, 3L, 3L, 5L, 3L, 5L, 3L,
3L, 5L, 3L, 3L, 3L, 3L, 5L, 4L, 4L, 5L, 3L, 3L, 2L, 2L, 3L
), .Label = c("Nicht vielfältig", "Eher nicht vielfältig",
"Teilweise vielfältig", "Eher vielfältig", "Sehr vielfältig",
"k. A."), class = c("ordered", "factor")), Geschlecht = structure(c(4L,
4L, 2L, 2L, 3L, 2L, 4L, 4L, 5L, 4L, 3L, 2L, 3L, 2L, 4L, 4L,
4L, 3L, 5L, 3L, 4L, 5L, 3L, 5L, 2L, 2L, 2L, 4L, 4L, 6L, 1L,
6L, 3L, 3L, 4L, 5L, 2L, 4L, 3L, 5L, 1L, 3L, 3L, 3L, 3L, 2L,
2L, 4L, 3L, 4L, 2L, 5L, 5L, 5L, 5L, 2L, 6L, 4L, 3L, 6L, 1L,
6L, 3L, 3L, 3L, 4L, 5L, 5L, 2L, 3L, 2L, 3L, 2L, 2L, 4L, 5L,
2L, 2L, 5L, 4L, 4L, 3L, 4L, 4L), .Label = c("Nicht vielfältig",
"Eher nicht vielfältig", "Teilweise vielfältig", "Eher vielfältig",
"Sehr vielfältig", "k. A."), class = c("ordered", "factor"
)), Kultur = structure(c(2L, 3L, 2L, 5L, 2L, 3L, 4L, 4L,
4L, 4L, 3L, 3L, 3L, 4L, 3L, 4L, 4L, 4L, 5L, 5L, 4L, 3L, 5L,
5L, 4L, 4L, 4L, 5L, 2L, 2L, 2L, 5L, 3L, 3L, 2L, 5L, 2L, 5L,
3L, 4L, 1L, 3L, 3L, 5L, 4L, 2L, 3L, 2L, 2L, 4L, 4L, 5L, 5L,
5L, 5L, 5L, 3L, 3L, 2L, 4L, 2L, 5L, 5L, 2L, 4L, 5L, 5L, 5L,
3L, 2L, 2L, 4L, 3L, 4L, 3L, 5L, 4L, 3L, 4L, 5L, 5L, 2L, 4L,
2L), .Label = c("Nicht vielfältig", "Eher nicht vielfältig",
"Teilweise vielfältig", "Eher vielfältig", "Sehr vielfältig",
"k. A."), class = c("ordered", "factor")), `körperliche Fähigkeien` = structure(c(2L,
3L, 3L, 4L, 6L, 5L, 5L, 4L, 5L, 3L, 2L, 2L, 3L, 2L, 3L, 5L,
4L, 3L, 3L, 2L, 4L, 5L, 2L, 5L, 2L, 3L, 2L, 3L, 4L, 2L, 3L,
2L, 4L, 5L, 2L, 5L, 2L, 5L, 3L, 3L, 2L, 3L, 1L, 4L, 3L, 4L,
4L, 4L, 5L, 4L, 2L, 5L, 5L, 5L, 5L, 3L, 2L, 3L, 3L, 6L, 3L,
6L, 4L, 5L, 6L, 4L, 5L, 5L, 2L, 3L, 5L, 3L, 6L, 4L, 3L, 5L,
3L, 2L, 4L, 4L, 3L, 4L, 4L, 2L), .Label = c("Nicht vielfältig",
"Eher nicht vielfältig", "Teilweise vielfältig", "Eher vielfältig",
"Sehr vielfältig", "k. A."), class = c("ordered", "factor"
)), `sozialer Hintergrund` = structure(c(3L, 3L, 3L, 5L,
3L, 5L, 4L, 4L, 5L, 4L, 3L, 3L, 3L, 4L, 3L, 2L, 4L, 4L, 5L,
4L, 4L, 4L, 4L, 5L, 4L, 4L, 2L, 4L, 4L, 2L, 2L, 5L, 4L, 6L,
2L, 5L, 2L, 4L, 3L, 3L, 3L, 3L, 3L, 5L, 4L, 3L, 4L, 4L, 6L,
4L, 2L, 5L, 5L, 5L, 5L, 5L, 6L, 4L, 3L, 6L, 2L, 5L, 5L, 3L,
4L, 5L, 5L, 5L, 4L, 3L, 4L, 3L, 4L, 4L, 3L, 5L, 3L, 3L, 5L,
5L, 5L, 3L, 2L, 2L), .Label = c("Nicht vielfältig", "Eher nicht vielfältig",
"Teilweise vielfältig", "Eher vielfältig", "Sehr vielfältig",
"k. A."), class = c("ordered", "factor"))), row.names = c(1L,
2L, 5L, 6L, 7L, 9L, 10L, 12L, 14L, 15L, 16L, 17L, 18L, 19L, 22L,
23L, 24L, 26L, 27L, 28L, 29L, 30L, 33L, 35L, 37L, 39L, 41L, 42L,
43L, 44L, 46L, 51L, 52L, 53L, 56L, 57L, 59L, 60L, 61L, 63L, 64L,
65L, 66L, 67L, 70L, 72L, 74L, 75L, 76L, 77L, 78L, 79L, 80L, 81L,
82L, 83L, 84L, 85L, 86L, 87L, 89L, 90L, 92L, 93L, 94L, 96L, 97L,
98L, 99L, 100L, 101L, 102L, 103L, 104L, 105L, 106L, 107L, 108L,
109L, 110L, 111L, 112L, 113L, 114L), class = "data.frame", na.action = structure(c(`3` = 3L,
`4` = 4L, `8` = 8L, `11` = 11L, `13` = 13L, `20` = 20L, `21` = 21L,
`25` = 25L, `31` = 31L, `32` = 32L, `34` = 34L, `36` = 36L, `38` = 38L,
`40` = 40L, `45` = 45L, `47` = 47L, `48` = 48L, `49` = 49L, `50` = 50L,
`54` = 54L, `55` = 55L, `58` = 58L, `62` = 62L, `68` = 68L, `69` = 69L,
`71` = 71L, `73` = 73L, `88` = 88L, `91` = 91L, `95` = 95L), class = "omit"))
您可以在绘制之前计算 group-wise 个百分比:
library(tidyverse)
subset(pivot_longer(MD3[1:6], 1:6), !is.na(value)) %>%
group_by(name, value) %>%
count() %>%
group_by(value) %>%
summarise(percent = n/sum(n), name = name) %>%
ggplot(aes(y = value, x = percent, fill = name)) +
geom_col(position = 'dodge') +
scale_colour_viridis_d(aesthetics = "fill") +
scale_x_continuous(labels = scales::percent) +
theme_light()+
labs(x = "Anteil in %", y ="", fill = 'Vielfalt im Bezug auf:')
在 Show percent % instead of counts in charts of categorical variables
他们讨论了如何在分类变量图表中显示百分比而不是计数。我基本上想做同样的事情,但在一个图中总结和比较多个变量。将上述 post 的解决方案应用于我的绘图时,它似乎计算了整个数据集中观察值的百分比,而不是整个变量中观察值的百分比。有谁知道如何解决这个问题?
ggplot(subset(tidyr::pivot_longer(MD3[1:6], 1:6), !is.na(value)),aes(y = value, fill = name)) +
geom_bar(position = 'dodge') +
scale_colour_viridis_d(aesthetics = "fill") +
theme_light()+
labs(x = "Anzahl", y ="", fill = 'Vielfalt im Bezug auf:')
ggplot(subset(tidyr::pivot_longer(MD3[1:6], 1:6), !is.na(value)),
aes(y = value, fill = name)) +
geom_bar(aes(x = (..count..)/sum(..count..)*100), position = 'dodge') +
scale_colour_viridis_d(aesthetics = "fill") +
theme_light()+
labs(x = "Anteil in %", y ="", fill = 'Vielfalt im Bezug auf:')
structure(list(Alter = structure(c(3L, 4L, 4L, 5L, 4L, 5L, 5L,
4L, 5L, 4L, 4L, 4L, 3L, 4L, 5L, 4L, 6L, 4L, 5L, 3L, 3L, 5L, 4L,
5L, 4L, 1L, 3L, 5L, 3L, 2L, 3L, 3L, 5L, 5L, 4L, 5L, 3L, 4L, 3L,
1L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 2L, 5L, 3L, 5L, 5L, 5L, 5L,
2L, 4L, 4L, 2L, 3L, 4L, 5L, 5L, 4L, 4L, 5L, 3L, 5L, 2L, 4L, 4L,
5L, 4L, 4L, 5L, 5L, 4L, 3L, 5L, 5L, 5L, 4L, 5L, 3L), .Label = c("Nicht vielfältig",
"Eher nicht vielfältig", "Teilweise vielfältig", "Eher vielfältig",
"Sehr vielfältig", "k. A."), class = c("ordered", "factor")),
Bildung = structure(c(4L, 1L, 3L, 5L, 5L, 5L, 4L, 4L, 5L,
4L, 3L, 3L, 3L, 4L, 4L, 2L, 4L, 3L, 5L, 3L, 4L, 5L, 4L, 5L,
4L, 4L, 2L, 4L, 4L, 2L, 3L, 5L, 4L, 5L, 3L, 5L, 3L, 5L, 3L,
4L, 3L, 3L, 3L, 5L, 4L, 3L, 2L, 5L, 4L, 4L, 4L, 5L, 5L, 5L,
5L, 5L, 6L, 4L, 3L, 6L, 3L, 5L, 3L, 3L, 3L, 5L, 3L, 5L, 3L,
3L, 5L, 3L, 3L, 3L, 3L, 5L, 4L, 4L, 5L, 3L, 3L, 2L, 2L, 3L
), .Label = c("Nicht vielfältig", "Eher nicht vielfältig",
"Teilweise vielfältig", "Eher vielfältig", "Sehr vielfältig",
"k. A."), class = c("ordered", "factor")), Geschlecht = structure(c(4L,
4L, 2L, 2L, 3L, 2L, 4L, 4L, 5L, 4L, 3L, 2L, 3L, 2L, 4L, 4L,
4L, 3L, 5L, 3L, 4L, 5L, 3L, 5L, 2L, 2L, 2L, 4L, 4L, 6L, 1L,
6L, 3L, 3L, 4L, 5L, 2L, 4L, 3L, 5L, 1L, 3L, 3L, 3L, 3L, 2L,
2L, 4L, 3L, 4L, 2L, 5L, 5L, 5L, 5L, 2L, 6L, 4L, 3L, 6L, 1L,
6L, 3L, 3L, 3L, 4L, 5L, 5L, 2L, 3L, 2L, 3L, 2L, 2L, 4L, 5L,
2L, 2L, 5L, 4L, 4L, 3L, 4L, 4L), .Label = c("Nicht vielfältig",
"Eher nicht vielfältig", "Teilweise vielfältig", "Eher vielfältig",
"Sehr vielfältig", "k. A."), class = c("ordered", "factor"
)), Kultur = structure(c(2L, 3L, 2L, 5L, 2L, 3L, 4L, 4L,
4L, 4L, 3L, 3L, 3L, 4L, 3L, 4L, 4L, 4L, 5L, 5L, 4L, 3L, 5L,
5L, 4L, 4L, 4L, 5L, 2L, 2L, 2L, 5L, 3L, 3L, 2L, 5L, 2L, 5L,
3L, 4L, 1L, 3L, 3L, 5L, 4L, 2L, 3L, 2L, 2L, 4L, 4L, 5L, 5L,
5L, 5L, 5L, 3L, 3L, 2L, 4L, 2L, 5L, 5L, 2L, 4L, 5L, 5L, 5L,
3L, 2L, 2L, 4L, 3L, 4L, 3L, 5L, 4L, 3L, 4L, 5L, 5L, 2L, 4L,
2L), .Label = c("Nicht vielfältig", "Eher nicht vielfältig",
"Teilweise vielfältig", "Eher vielfältig", "Sehr vielfältig",
"k. A."), class = c("ordered", "factor")), `körperliche Fähigkeien` = structure(c(2L,
3L, 3L, 4L, 6L, 5L, 5L, 4L, 5L, 3L, 2L, 2L, 3L, 2L, 3L, 5L,
4L, 3L, 3L, 2L, 4L, 5L, 2L, 5L, 2L, 3L, 2L, 3L, 4L, 2L, 3L,
2L, 4L, 5L, 2L, 5L, 2L, 5L, 3L, 3L, 2L, 3L, 1L, 4L, 3L, 4L,
4L, 4L, 5L, 4L, 2L, 5L, 5L, 5L, 5L, 3L, 2L, 3L, 3L, 6L, 3L,
6L, 4L, 5L, 6L, 4L, 5L, 5L, 2L, 3L, 5L, 3L, 6L, 4L, 3L, 5L,
3L, 2L, 4L, 4L, 3L, 4L, 4L, 2L), .Label = c("Nicht vielfältig",
"Eher nicht vielfältig", "Teilweise vielfältig", "Eher vielfältig",
"Sehr vielfältig", "k. A."), class = c("ordered", "factor"
)), `sozialer Hintergrund` = structure(c(3L, 3L, 3L, 5L,
3L, 5L, 4L, 4L, 5L, 4L, 3L, 3L, 3L, 4L, 3L, 2L, 4L, 4L, 5L,
4L, 4L, 4L, 4L, 5L, 4L, 4L, 2L, 4L, 4L, 2L, 2L, 5L, 4L, 6L,
2L, 5L, 2L, 4L, 3L, 3L, 3L, 3L, 3L, 5L, 4L, 3L, 4L, 4L, 6L,
4L, 2L, 5L, 5L, 5L, 5L, 5L, 6L, 4L, 3L, 6L, 2L, 5L, 5L, 3L,
4L, 5L, 5L, 5L, 4L, 3L, 4L, 3L, 4L, 4L, 3L, 5L, 3L, 3L, 5L,
5L, 5L, 3L, 2L, 2L), .Label = c("Nicht vielfältig", "Eher nicht vielfältig",
"Teilweise vielfältig", "Eher vielfältig", "Sehr vielfältig",
"k. A."), class = c("ordered", "factor"))), row.names = c(1L,
2L, 5L, 6L, 7L, 9L, 10L, 12L, 14L, 15L, 16L, 17L, 18L, 19L, 22L,
23L, 24L, 26L, 27L, 28L, 29L, 30L, 33L, 35L, 37L, 39L, 41L, 42L,
43L, 44L, 46L, 51L, 52L, 53L, 56L, 57L, 59L, 60L, 61L, 63L, 64L,
65L, 66L, 67L, 70L, 72L, 74L, 75L, 76L, 77L, 78L, 79L, 80L, 81L,
82L, 83L, 84L, 85L, 86L, 87L, 89L, 90L, 92L, 93L, 94L, 96L, 97L,
98L, 99L, 100L, 101L, 102L, 103L, 104L, 105L, 106L, 107L, 108L,
109L, 110L, 111L, 112L, 113L, 114L), class = "data.frame", na.action = structure(c(`3` = 3L,
`4` = 4L, `8` = 8L, `11` = 11L, `13` = 13L, `20` = 20L, `21` = 21L,
`25` = 25L, `31` = 31L, `32` = 32L, `34` = 34L, `36` = 36L, `38` = 38L,
`40` = 40L, `45` = 45L, `47` = 47L, `48` = 48L, `49` = 49L, `50` = 50L,
`54` = 54L, `55` = 55L, `58` = 58L, `62` = 62L, `68` = 68L, `69` = 69L,
`71` = 71L, `73` = 73L, `88` = 88L, `91` = 91L, `95` = 95L), class = "omit"))
您可以在绘制之前计算 group-wise 个百分比:
library(tidyverse)
subset(pivot_longer(MD3[1:6], 1:6), !is.na(value)) %>%
group_by(name, value) %>%
count() %>%
group_by(value) %>%
summarise(percent = n/sum(n), name = name) %>%
ggplot(aes(y = value, x = percent, fill = name)) +
geom_col(position = 'dodge') +
scale_colour_viridis_d(aesthetics = "fill") +
scale_x_continuous(labels = scales::percent) +
theme_light()+
labs(x = "Anteil in %", y ="", fill = 'Vielfalt im Bezug auf:')