R // ggplot2: Dynami c title при объединении facet_wrap и цикла for - PullRequest
1 голос
/ 27 марта 2020

У меня есть пространственно-временной набор данных с различными индикаторами для набора местоположения, который я sh должен отобразить в сверхурочное время.

Вот мой facet_wrap + l oop

#basemap
basemap <- ggplot() +
    geom_sf(data= country_adm2) +
  coord_sf() +
  theme_void() 
print(basemap)

#joining dataframe to polygons
df_poly <- left_join(country_adm2, df, by= "County") ##joins the data by County.

#loop & facet_wrap plots
## This goes over the dataset (df_poly) to plot the the three variables, and facet_wrap over ~Date to see time variation (over 12 months)

for(i in df_poly[40:42]){ ## the vars I wish to plot  to iterate the temporal map through
imap <- basemap + 
  geom_sf(aes(fill = i), data= df_poly ) +
  scale_fill_viridis(option = "cividis", direction= 1, alpha= 1, )+
  facet_wrap(~ Date) + ##the temporal facet_wrap
  ggtitle(paste0("Indicators:", i)) +
  labs(fill = "% of\ncovered population")
  print(imap)
}

Проблема в том, что вместо фактических имен var i в ggtitle я получаю первое значение. Как мне пройти итерацию по names(df_poly[40:42]) правильно для каждого из графиков? Я смотрел на разные способы, но ни один из них не работал.

Я считаю, что способ, которым я делаю l oop, кажется, проблема. Я предполагаю, что мне нужно l oop по списку, а не напрямую по фрейму данных, однако я не уверен, как это сделать.

1 Ответ

2 голосов
/ 27 марта 2020

Попробуй это. Вы должны l oop над именами ваших переменных. Я добавил комментарии, начинающиеся с ##, где я изменил ваш код.

#basemap
basemap <- ggplot() +
  geom_sf(data= country_adm2) +
  coord_sf() +
  theme_void() 
print(basemap)

#joining dataframe to polygons
df_poly <- left_join(country_adm2, df, by= "County") ##joins the data by County.

#loop & facet_wrap plots
## This goes over the dataset (df_poly) to plot the the three variables, and facet_wrap over ~Date to see time variation (over 12 months)

## loop over the names of the vars to plot
for(i in names(df_poly)[40:42]){ ## the vars I wish to plot  to iterate the temporal map through
  imap <- basemap + 
    ## Convert names to symbols using!!sym()
    geom_sf(aes(fill = !!sym(i)), data = df_poly ) +
    scale_fill_viridis(option = "cividis", direction= 1, alpha= 1, )+
    facet_wrap(~ Date) + ##the temporal facet_wrap
    ggtitle(paste0("Indicators:", i)) +
    labs(fill = "% of\ncovered population")
  print(imap)
}
...