[英]How to display summary statistics by group in ggplot2
我有一个包含 3 个变量的数据框:manu、brand 和 vol。
这是我的 plot。 如何在 plot 的某处按制造商显示总体积和体积百分比?
我的数据:
manu <- c('A', 'A', 'A', 'B',"B", "C","C")
brand <- c('A1', 'A2', 'A3', 'B1',"B2", "C1","C2")
vol <- c(10, 25, 30, 45, 15, 25, 20)
我的代码:
ggplot2::ggplot(environment=environment()) + ggplot2::geom_bar(ggplot2::aes(y = vol, x = manu, fill = brand), stat = "identity", position = ggplot2::position_stack(reverse = TRUE), data = df)
完成的最终答案:
library("magrittr")
library("dplyr")
library(ggplot2)
manu <- c('A', 'A', 'A', 'B',"B", "C","C")
brand <- c('A1', 'A2', 'A3', 'B1',"B2", "C1","C2")
vol <- c(10, 25, 30, 45, 15, 25, 20)
df <- data.frame(manu = c('A', 'A', 'A', 'B',"B", "C","C"),
brand = c('A1', 'A2', 'A3', 'B1',"B2", "C1","C2"),
vol = c(10, 25, 30, 45, 15, 25, 20))
df$grand_total_vol = sum(df$vol)
df2 <- df %>% group_by(manu) %>% mutate(total_vol = sum(vol)) %>% mutate(percent_vol = 100*total_vol/grand_total_vol) %>% ungroup()
ggplot(data=df2) +
geom_bar(aes(x=manu, y=vol, fill=brand),stat = "identity",position = position_stack(reverse = TRUE)) +
geom_text(aes(x=manu, y=vol, label= paste0("Percent Vol: ", round(percent_vol*100,1),"%")),
position = position_stack(vjust = .5)) +
geom_text(aes(x = manu,y = 70, label = paste0(df2$total_vol, "; ", round(df2$percent_vol, 1), "%")))
像这样的东西应该工作。 您将不得不根据您认为合适的百分比计算/使用 position。
install.packages("dplyr")
install.packages("magrittr")
library("magrittr")
library("dplyr")
library(ggplot2)
manu <- c('A', 'A', 'A', 'B',"B", "C","C")
brand <- c('A1', 'A2', 'A3', 'B1',"B2", "C1","C2")
vol <- c(10, 25, 30, 45, 15, 25, 20)
df <- data.frame(manu = c('A', 'A', 'A', 'B',"B", "C","C"),
brand = c('A1', 'A2', 'A3', 'B1',"B2", "C1","C2"),
vol = c(10, 25, 30, 45, 15, 25, 20))
df2 <- df %>% group_by(manu) %>% mutate(total_vol = sum(vol),
percent_vol = vol/total_vol) %>%
ungroup()
ggplot(data=df2) +
geom_bar(aes(x=manu, y=vol, fill=brand),stat = "identity",position = position_stack(reverse = TRUE)) +
geom_text(aes(x=manu, y=vol, label= paste0("Percent Vol: ", round(percent_vol*100,1),"%")),
position = position_stack(vjust = .5)) +
geom_text(aes(x = manu,y = 70, label = paste0("Total Vol: ",df2$total_vol)))
已编辑
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.