Построение двух отдельных диаграмм в одном графике с использованием ggplot2 - PullRequest
1 голос
/ 21 июня 2019

Я хочу создать простой климатический график, на котором график осадков и температуры двух отдельных географических мест представлен на одном графике.Я хочу использовать GGplot для этого.

Мой набор данных выглядит следующим образом:

Climate.Terschelling<- structure(list(Maand = structure(c(5L, 4L, 8L, 1L, 9L, 7L, 6L, 
2L, 12L, 11L, 10L, 3L), .Label = c("april", "augustus", "december", 
"februari", "januari", "juli", "juni", "maart", "mei", "november", 
"oktober", "september"), class = "factor"), Temperatuur_T = c(2.2, 
2.2, 4.1, 4.4, 11, 14.1, 16, 16.3, 14.2, 10.07, 6.5, 3.7), Neerslag_T = c(67L, 
45L, 51L, 43L, 48L, 53L, 73L, 81L, 84L, 84L, 89L, 76L), Temperatuur_NL = c(2.2, 
2.6, 5, 7.6, 12.1, 14.9, 16.7, 16.6, 14.1, 10.5, 6, 3.1), Neerslag_NL = c(69L, 
49L, 60L, 48L, 56L, 68L, 75L, 76L, 74L, 78L, 76L, 78L), maand = structure(1:12, .Label = c("Jan", 
"Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", 
"Nov", "Dec"), class = "factor")), row.names = 2:13, class = "data.frame")

maand <- as.character(c("Jan", "Feb", "Mar", "Apr", "May", 
                                           "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"))
Climate.Terschelling$maand<-maand
Climate.Terschelling$maand <- factor(Climate.Terschelling$maand, levels=unique(Climate.Terschelling$maand))

Я использую этот код для создания комбинированного графика в GGplot 2

library(ggplot2)    
ggplot(data = Climate.Terschelling,
             mapping = aes(x = maand, y = Temperatuur_NL, group = 1)) + 
      geom_bar(mapping = aes(y = Neerslag_NL/2), stat = "identity", colour = "black", fill = "dodgerblue1", size =1
               , alpha = 0.3) +
        geom_bar(mapping = aes(y = Neerslag_T/2), stat = "identity", colour = "black", fill = "navyblue", size =1
                 , alpha = 0.3) +
     geom_line(colour = "yellow", size = 1) + 
        geom_line(data = Climate.Terschelling, aes(y=Temperatuur_T), colour = "red", size = 1) + 
      scale_y_continuous(
        "temperatuur, C", 
        sec.axis = sec_axis(~ . * 2, name = "Neerslag, mm"))

Я не могу понять, как построить две полосы осадков рядом друг с другом, а не сложены.желательно с легендой, определяющей бары.

Сюжет, как он выглядит сейчас: R график изменения климата

1 Ответ

2 голосов
/ 21 июня 2019

Весь смысл в том, чтобы обновить ваш набор данных в аккуратный формат, чтобы сгруппировать по соответствующим переменным.

У вас не должно быть двух столбцов «Temperatuur» и двух столбцов «Neerslag» в сочетании с «_T» и «_NL». Если вам удастся получить эту информацию в отдельном столбце, вам будет намного проще манипулировать вашим набором данных, и код ggplot будет короче:

# reshape dataset
Climate.Terschelling %>%
  gather(type, value, -Maand, -maand) %>%
  separate(type, c("type1", "type2")) -> Climate.Terschelling_upd

 ggplot()+
    geom_col(data = Climate.Terschelling_upd %>% filter(type1 == "Neerslag"), 
             mapping = aes(x = maand, y = value/2, fill=type2), position = "dodge")+
    scale_fill_manual(values=c("dodgerblue1","navyblue"))+
    geom_line(data = Climate.Terschelling_upd %>% filter(type1 == "Temperatuur"), 
              mapping = aes(x = maand, y = value, col = type2, group = type2), size = 1)+
    scale_color_manual(values=c("yellow","red"))+
    scale_y_continuous("temperatuur, C", sec.axis = sec_axis(~ .*2, name = "Neerslag, mm"))

enter image description here

...