Добавить разницу в% к сгруппированной гистограмме - PullRequest
2 голосов
/ 24 апреля 2020

У меня есть следующий фрейм данных в 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

Я собираюсь сделать это для нескольких полей набора данных. Следовательно, если генерируется новое поле для захвата приращения в%, мне нужно сделать это сразу в нескольких полях (например, количество зданий, но также и количество людей ... et c). В дополнение к значению следует добавить символ «%», который выглядит следующим образом:

enter image description here

1 Ответ

3 голосов
/ 24 апреля 2020

Вы можете использовать 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)
...