r - 将差异百分比添加到分组条形图中

标签 r ggplot2 plot geom-bar

我在 r 中有以下数据框,显示了两个不同年份的一些社区区(现场 CD)的几个属性:

#Example data with one single attribute

x <- structure(list(numbldgs = c(195, 845, 3621, 3214, 10738, 793, 
223, 957, 4248, 3456, 11576, 803), Year = c("2007", "2007", "2007", 
"2007", "2007", "2007", "2018", "2018", "2018", "2018", "2018", 
"2018"), CD = c("103", "111", "210", "313", "414", "501", "103", 
"111", "210", "313", "414", "501")), row.names = c(NA, -12L), class = c("tbl_df", 
"tbl", "data.frame"))

我使用以下代码绘制这些数据:

ggplot(x, aes(x=CD, y=numbldgs, fill = Year)) +
  geom_bar(stat="identity", width=.9, position = "dodge2") +
  labs( x="", y = "Number of buildings")+
  theme_classic() +
  theme(axis.text.x = element_text(angle=0, vjust=0.5, size=16), 
        axis.text.y = element_text(angle=0, vjust=0.5, size=16),
        legend.text=element_text(size=14), legend.position="bottom",
        legend.title = element_text(size=16),
        axis.title=element_text(size=12)) +
  scale_fill_manual(values=c('#F6D3B5','#D93B0A')) + 
  scale_y_continuous(labels = function(x) format(x, scientific = FALSE))

返回以下图表:

enter image description here

我试图在每个社区的 2018 年条形图上添加一个标签,显示 2007 年和 2018 年值之间的相对增量,用以下公式表示:

relative increment = ((value_in_2018 - value_in_2007)/(value_in_2007))*100

我的目标是对数据集的多个字段执行此操作。因此,如果生成一个新字段来捕获增量百分比,我需要同时在多个字段中完成此操作(例如建筑物数量,还有人数......等)。除了值之外,还应添加符号“%” - 如下所示:

enter image description here

最佳答案

您可以使用tidyverse来计算百分比/增量值,您可以在末尾添加geom_text:

df2<-df %>% 
  arrange(CD) %>% 
  group_by(CD) %>% 
  mutate(rel_inc= numbldgs-lag(numbldgs, default=first(numbldgs)))

#set 0 labels to NA
df2[df2 == 0] <- NA

ggplot(df2, aes(x=CD, y=numbldgs, fill = Year)) +
  geom_bar(stat="identity", width=.9, position = "dodge2") +
  labs( x="", y = "Number of buildings")+
  theme_classic() +
  theme(axis.text.x = element_text(angle=0, vjust=0.5, size=16), 
        axis.text.y = element_text(angle=0, vjust=0.5, size=16),
        legend.text=element_text(size=14), legend.position="bottom",
        legend.title = element_text(size=16),
        axis.title=element_text(size=12)) +
  scale_fill_manual(values=c('#F6D3B5','#D93B0A')) + 
  scale_y_continuous(labels = function(x) format(x, scientific = FALSE))+
  geom_text(aes(label=rel_inc), position=position_dodge(width=0.9), vjust=-0.25)

关于r - 将差异百分比添加到分组条形图中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61414545/

相关文章:

plot - 如何在 Julia 中使用 Gadfly.jl 绘制线性函数?

r - 输出数据帧中所有因素的级别数

r - R中lm模型中 'I'关键字的意义

r - 如何使用列之一中的值对data.frame进行过滤/子集设置

stat_poly_eq 中的 R 科学记数法

python - 使用 matplotlib 代理艺术家将图例添加到平行坐标图

r - R 中的动态子集条件

r - 使用 API key 在 ggmap 中映射时出错(403 Forbidden)

r - ggplot在轴标签上的度数符号之前插入空格

python - 期望得到一个图,但只是用 Pandas 获取轴坐标