ggplot: Как добавить среднее значение по группе в виде линии на сгруппированную гистограмму в R? - PullRequest
2 голосов
/ 27 января 2020

Я хотел бы добавить значение «All_Parties_average» к моей гистограмме в виде зеленой линии с легендой (см. Второе изображение, добавленное по ссылке). Очень ценю помощь!

Сейчас мой график выглядит так:

Мой график на данный момент

Это то, что я хотел бы это будет выглядеть так:

Конечный результат

Вот мои данные:

Gender <- as.factor(c("M","M","M","M","M","M","M","M","M","M","F","F","F","F","F","F","F","F","F","F"))
Political_Party <- as.factor(c("E200", "EKRE", "ERE", "Isamaa", "REF","Roh", "SDE", "Vabae", "Vasak", "KE","E200", "EKRE", "ERE", "Isamaa", "REF","Roh", "SDE", "Vabae", "Vasak", "KE"))
Media_coverage_average <- c(61,95,41,162,107,23,130,68,6,152,99,49,9,87,157,52,112,31,14,202)
All_Parties_average <- c(90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90)

my_data <- data.frame(Sugu, Political_Party, Media_coverage_average, All_Parties_average, stringsAsFactors=F)  

Также цвета для графика:

my_colors <- c(
  `Green` <- "#00a99d",
  `Purple` <- "#9424fb",
  `Grey` <- "#a6a6a6",
  `LightPurple` <- "#c991fd",
  `LightGrey` <- "#c9c9c9",
  `DarkGrey`<- "#636363",
  `ExtraDarkGrey`<- "#4c4c4c")

И мой график:

my_plot <- ggplot(my_data, aes(x = Political_Party, y = Media_coverage_average, fill = Gender))+
  geom_bar(position="dodge", stat="identity")+
  geom_text(aes(label=Media_coverage_average), position=position_dodge(width=0.9), vjust=-0.25, size=6, family="Titillium Web", color= ExtraDarkGrey)+
  labs(x="Political Party", y="Average media coverage",
       caption = "Author")+
  theme_ipsum_tw(grid=FALSE, axis_text_size=18, axis_title_size = 16, caption_size = 15, base_size = 17, subtitle_size = 20)+
  scale_fill_manual(values = c(Grey, Purple), labels = c("Mehed", "Naised"))

my_plot

Ответы [ 2 ]

2 голосов
/ 27 января 2020

возможно вы можете добавить его с помощью geom_line

my_plot <- ggplot(my_data, aes(x = Political_Party, y = Media_coverage_average, fill = Gender))+
  geom_bar(position="dodge", stat="identity")+
  geom_text(aes(label=Media_coverage_average), position=position_dodge(width=0.9), vjust=-0.25, size=6, family="Titillium Web", color= ExtraDarkGrey)+
  labs(x="Political Party", y="Average media coverage",
       caption = "Author")+
  scale_fill_manual(values = c(Grey, Purple), labels = c("Mehed", "Naised"))+
  theme_ipsum_tw(grid=FALSE, axis_text_size=18, axis_title_size = 16, caption_size = 15, base_size = 17, subtitle_size = 20)+
    geom_line(aes(y=All_Parties_average,group=1),size=1.5,color="green")   

enter image description here

1 голос
/ 27 января 2020

Дополнительно к ответу @ Senzeybek, вы можете добавить легенду для зеленой линии, передав ее цвет в aes из geom_line и установив цвет с помощью scale_color_manual:

library(ggplot2)
ggplot(my_data, aes(x = Political_Party, y = Media_coverage_average, fill = Gender))+
  geom_bar(position="dodge", stat="identity")+
  geom_text(aes(label=Media_coverage_average), position=position_dodge(width=0.9), vjust=-0.25, size=6, family="Titillium Web", color= ExtraDarkGrey)+
  labs(x="Political Party", y="Average media coverage",
       caption = "Author")+
  #theme_ipsum_tw(grid=FALSE, axis_text_size=18, axis_title_size = 16, caption_size = 15, base_size = 17, subtitle_size = 20)+
  scale_fill_manual(values = c(Grey, Purple), labels = c("Mehed", "Naised"))+
  geom_hline(aes(yintercept = All_Parties_average, color = "Average", group = 1), size = 2)+
  scale_color_manual(values = "green")

enter image description here

...