我正在制作一个条形图,以显示一个样本的百分比,该样本可识别为多年以来一系列政党清单。没关系。麻烦的是获取垂直轴上的百分比计算,以将每年的总计数用作百分比计算的分母(它将所有年份的总计数用作该分母)。
换句话说,我正在生成的条形图总计为100%,但是考虑到这代表了三年的数据,我希望它们相加总计300%。每年的样本量各不相同,因此将垂直轴值乘以样本中的年数将无效。
ggplot(df.graph, aes(x=Answer, y=..count../sum(..count..), fill=Year)) +
geom_bar(position="dodge")+
scale_y_continuous(labels = function(x) paste0(x*100, "%"))+
theme(axis.text.x=element_text(angle=45,hjust=1))+
xlab(NULL)+
ylab(NULL)
答案 0 :(得分:0)
请尝试使用geom_bar(stat = "count")
,而不要使用默认的geom_bar(stat = "identity")
。您可以使用dplyr
轻松地计算百分比。例如,考虑ggplot2::mpg
数据,
此数据集包含EPA在http://fueleconomy.gov上提供的燃油经济性数据的子集。它仅包含在1999年至2008年之间每年都有新版本的车型-用作汽车普及的代名词。
ggplot2::mpg %>% select(manufacturer, year)
#> # A tibble: 234 x 2
#> manufacturer year
#> <chr> <int>
#> 1 audi 1999
#> 2 audi 1999
#> 3 audi 2008
#> 4 audi 2008
#> 5 audi 1999
#> 6 audi 1999
#> 7 audi 2008
#> 8 audi 1999
#> 9 audi 1999
#> 10 audi 2008
#> # ... with 224 more rows
manufacturer
:型号名称year
:制造年份library(tidyverse)
您可以计算每个manufacturer
占year
的百分比。换句话说,每个manufacturer
中百分比的总和可能为1。
此外,您可以使用scales::percent
代替labels = function(x) paste0(x*100, "%")
。
mpg %>%
group_by(manufacturer) %>%
mutate(N = n()) %>% # number of each manufacturer
group_by(manufacturer, year) %>% # pair of manu, year
summarise(perc = n() / unique(N)) %>% # n() = number of each pair => n()/N = proportion
ggplot() +
aes(x = manufacturer, y = perc, fill = factor(year)) +
geom_bar(position = "dodge", stat = "identity") + # use y as y axis
scale_y_continuous(labels = scales::percent) +
theme(axis.text.x = element_text(angle = 45, hjust = 1),
axis.title = element_blank()) +
labs(fill = "Year")
添加每个刻度(红色和蓝色),您可以分别获得100%。
另一方面,您可以计算manufacturer
在每个year
中的比例,以使每年的总和变为1 。
mpg %>%
group_by(year) %>%
mutate(N = n()) %>%
group_by(manufacturer, year) %>%
summarise(perc = n() / unique(N)) %>%
ggplot() +
aes(x = manufacturer, y = perc, fill = factor(year)) +
geom_bar(position = "dodge", stat = "identity") +
scale_y_continuous(labels = scales::percent) +
theme(axis.text.x = element_text(angle = 45, hjust = 1),
axis.title = element_blank()) +
labs(fill = "Year")
添加每种颜色,您可以获得每种颜色的100%。