Catégories
R

Cherry blossom

It’s cherry blossom time… A nice dataset going back to the year 812 in Japan can be found here. It describes the phenological data for full flowering date of cherry tree (Prunus jamasakura) in Kyoto, showing springtime climate changes.

Let’s draw…

# params ------------------------------------------------------------------

url_kyoto <- "http://atmenv.envi.osakafu-u.ac.jp/aono/kyophenotemp4/"
file_kyoto <- "kyoto.rds"   # cache data
icon_sakura <- "sakura.png" # cache icon


# config ------------------------------------------------------------------

library(tidyverse)
library(fs)
library(janitor)
library(httr)
library(rvest)
library(glue)
library(ggimage)

Sys.setlocale("LC_TIME", "en_GB.UTF-8")


# data --------------------------------------------------------------------

# icon
if (!file_exists(icon_sakura)) {
  GET("https://www.flaticon.com/download/icon/7096433?icon_id=7096433&author=232&team=232&keyword=Sakura&pack=packs%2Fsakura-festival-59&style=522&format=png&color=&colored=2&size=512&selection=1&premium=0&type=standard&search=cherry+blossom",
      write_disk(icon_sakura))
}

# blossom dates, scraped from the web page (more up to date than the xls files)
if (!file_exists(file_kyoto)) {
  GET(url_kyoto) |> 
    content() |> 
    html_element("pre") |>
    html_text2() |>  
    str_replace_all("\xc2\xa0", " ") |> # bad encoding needs correction
    read_fwf(fwf_cols("ad"   = c(7, 10), 
                      "fifd" = c(17, 20), 
                      "fufd" = c(22, 25), 
                      "work" = c(27, 30),
                      "type" = c(32, 35), 
                      "ref"  = c(37, Inf)),
             skip = 26,
             na = c("", "NA", "-")) |> 
    remove_empty() |>  
    mutate(full_flowering_date = ymd(glue("{str_pad(ad, 4, 'left', '0')}{fufd}")),
           full_flowering_date_doy = yday(full_flowering_date)) |> 
    write_rds(file_kyoto)
}


# plot --------------------------------------------------------------------

read_rds(file_kyoto) |> 
  mutate(random_size = sample(c(0.015, 0.02, 0.025, 0.03), length(ad), replace = TRUE)) |> 
  ggplot(aes(ad, parse_date_time(full_flowering_date_doy, orders = "j"))) +
  geom_smooth(color = NA, fill = "chocolate4", alpha = 0.5) +
  geom_image(aes(size = I(random_size)), image = icon_sakura) +
  geom_smooth(color = "chocolate3", se = FALSE, alpha = 0.5) +
  scale_y_datetime(labels = scales::date_format("%b %d"),
                   breaks = "weeks", minor_breaks = "days") +
  labs(title = "Cherry blossom",
       subtitle = "Kyoto",
       x = "year",
       y = "date",
       caption = glue("http://r.iresmi.net/ {Sys.Date()}
                      data: {url_kyoto}
                      icon by Vitaly Gorbachev")) +
  theme_minimal() +
  theme(plot.background = element_rect(fill = "cornflowerblue"),
        panel.grid = element_line(color = "dodgerblue"),
        text = element_text(color = "pink", family = "Ubuntu"),
        plot.title = element_text(size = 20),
        plot.caption = element_text(size = 7),
        axis.text = element_text(color = "pink"))

ggsave("cherry_blossom.png", width = 25, height = 18, units = "cm", dpi = 300)

Laisser un commentaire