R语言 在分组条形图中添加百分比

wko9yo5t  于 2023-01-06  发布在  其他
关注(0)|答案(1)|浏览(221)

我想知道如何在分组条形图中包含百分比差异这是我拥有的数据框

我拥有的代码:

library(scales)
library (ggplot2)
library(dplyr)
library(tidyr)
df %>% 
pivot_longer(-fuel_type) %>%
ggplot(aes(x=fuel_typ, y=value,fill=name))+
geom_col(position=position_dodge()) + 
scale_fill_manual(values=c("red","blue")) +
scale_y_continous(labels=label_comma()) + 
theme_bw()

(以上代码归功于@Tarjae)
输出:

我想知道如何在"no_car_21"条形图顶部用正号或负号标记"no_car_21"相对于"no_car_18"的百分比差异?
多谢了

5w9g7ksd

5w9g7ksd1#

您可以使用lag计算每组与先前值的百分比变化,并通过调整hjustvjust将其分配给geom_text,如下所示:

df <- data.frame(fuel_type = c("DIESEL", "DIESEL/ELECTRIC", "LPG", "PETROL", "PETROL/ELECTRIC"),
                 no_car_18 = c(47817, 14, 904, 333872, 3653),
                 no_car_21 = c(3992, 199, 2224, 215199, 30550))

library(scales)
library(ggplot2)
library(dplyr)
library(tidyr)
df %>% 
  pivot_longer(-fuel_type) %>%
  group_by(fuel_type) %>%
  mutate(pct = (value/lag(value)-1)*100) %>%
  ggplot(aes(x=fuel_type, y=value,fill=name))+
  geom_col(position=position_dodge()) + 
  scale_fill_manual(values=c("red","blue")) +
  geom_text(aes(y = value, label = round(pct, 2)), hjust = 0, vjust = -0.5) +
  scale_y_continuous(labels=label_comma()) + 
  theme_bw()

创建于2023年1月3日,使用reprex v2.0.2

相关问题