Post hoc synopsis

Оваа недела се посветивме повеќе кон начинот на пишување ggplot2 код, имено, дали сите естетики се подесуваат со еден повик до aes или секоја посебно. Слично пракса може да се примени и за други ggplot2 фунцкии коишто доколку ги повикаме повторно не се во конфликт со претходниот код. Такви се на пример labs или theme (примери подолу). Слично може да се примени и со dplyr::filter, каде што често, но не секогаш, може да филтрираме податоци со синтаксата filter(x="x", y="y") или filter(x="a") %>% filter(y="b"). Ова е интересно од аспект на читливоста на кодот и иако бара повеќе пишување, долгата форма (со посебен aes за секоја естетика) можеби е подостапна за нови корисници.

Други новини во овој документ се однесуваат на стилизирање на ggplot2 графици, со основни функции или додатни пакети (ggridges).

Резиме

  • .Rmd (R Markdown) е околината во која ќе работиме
  • Нов R Notebook: Мени: File -> New File -> R notebook
  • Корисни кратенки:
    • code chunks (ctrl+alt+i)
    • pipes %>% (ctrl+shift+m)
    • assignment <- (alt+-)
    • view()

Pipes expained, maybe

Нов dataset

TidyTuesday 38: податоци од националните паркови во САД

Брз и бавен ggplot

Вообичаено:

ggplot(my_data,
 aes(var1, y = var2, col = var3)) +
  geom_point() +
  ggtitle("My Title") +
  labs(x = "the x label",
   y = "the y label",
   col = "legend title")

(извор:EvaMaeRey)

Бавно:

ggplot(data = my_data) +
  aes(x = var1) +
  labs(x = "the x label") +
  aes(y = var2) +
  labs(y = "the y label") +
  geom_point() +
  aes(col = var3) +
  labs(col = "legend title") +
  labs(title = "My title")

Ѕирни ги податоците со glimpse

library(tidyverse)
library(dplyr)

park_visits <- readr::read_csv("https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2019/2019-09-17/national_parks.csv")

glimpse(park_visits)
## Rows: 21,560
## Columns: 12
## $ year              <chr> "1904", "1941", "1961", "1935", "1982", "1919", "...
## $ gnis_id           <chr> "1163670", "1531834", "2055170", "1530459", "2772...
## $ geometry          <chr> "POLYGON", "MULTIPOLYGON", "MULTIPOLYGON", "MULTI...
## $ metadata          <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N...
## $ number_of_records <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1...
## $ parkname          <chr> "Crater Lake", "Lake Roosevelt", "Lewis and Clark...
## $ region            <chr> "PW", "PW", "PW", "PW", "PW", "NE", "IM", "NE", "...
## $ state             <chr> "OR", "WA", "WA", "WA", "CA", "ME", "TX", "MD", "...
## $ unit_code         <chr> "CRLA", "LARO", "LEWI", "OLYM", "SAMO", "ACAD", "...
## $ unit_name         <chr> "Crater Lake National Park", "Lake Roosevelt Nati...
## $ unit_type         <chr> "National Park", "National Recreation Area", "Nat...
## $ visitors          <dbl> 1500, 0, 69000, 2200, 468144, 64000, 448000, 7387...

Вкупен број на посетители по години

pv_grouped <- park_visits %>%
  filter(unit_type == "National Park") %>%
  filter(!year == "Total") %>%
  group_by(year) %>%
  summarise_at(.vars = vars("visitors"),
    .funs = list("visitors_per_year"=sum)) %>%
  mutate(year = as.numeric(year))
pv_grouped

Графички, горната табела може да ја прикажеме на следниот начин:

 ggplot(data = pv_grouped) +
    aes(x = year) +
    aes(y = visitors_per_year / 10^6) +
    geom_line(color = "forestgreen") +
    geom_area(alpha = .3, fill = "forestgreen") +
    scale_y_continuous(labels = scales::unit_format(unit = "M")) +
    scale_x_continuous(breaks = seq(1910, 2016, 10),
      labels = c(1910, paste("'", seq(20, 90, 10), sep = ""), 2000, "'10")) +
    labs(x="") +
    labs(y="") +
    labs(title="U.S. national parks have never been so popular") +
    labs(subtitle="Annial recreational visits to national parks since 1904") +
    labs(caption="Source: National Parks Service") +
    ggthemes::theme_fivethirtyeight()

Најдобрите 10 паркови

top10 <- park_visits %>%
  filter(year == "Total") %>%
  arrange(desc(visitors)) %>%
  top_n(n = 10, wt=visitors)

pv2 <- park_visits %>%
  filter(!year == "Total") %>%
  select(year, unit_name, visitors) %>%
  group_by(year) %>%
  mutate(year_rank = rank(-visitors)) %>%
  ungroup %>%
  mutate(year = as.numeric(year)) %>%
  arrange(year, year_rank)

pv2_top10 <- filter(.data = pv2, unit_name %in% top10$unit_name)

pv2_top10

И графички

library(ggridges)
ord <- top10$unit_name[order(top10$visitors, decreasing = FALSE)]
lbl <- str_remove(ord, "National Park")

ggplot(data = pv2_top10) +
  aes(x = year) +
  aes(y = unit_name) +
  aes(fill = unit_name) +
  aes(group = unit_name) +
  aes(height = visitors) +
  aes(scale = .0000001) +
  ggridges::geom_ridgeline(alpha = .5) +
  theme_ridges() +
  labs(y = "") +
  labs(x = "") +
  labs(title = "National park visitors per year") +
  labs(subtitle = "The twenty most-visited parks overall") +
  # theme(axis.text.y = element_text(size = 14)) +
  scale_y_discrete(limits = ord, labels = lbl) +
  scale_fill_cyclical(limits = ord, values = c("dodgerblue", "forestgreen")) +
  scale_x_continuous(
    limits = c(1950, 2016),
    breaks = seq(1950, 2016, 10),
    labels = c("1950", "'60", "'70", "'80", "'90", "2000", "'10")
  ) +
  ggthemes::theme_fivethirtyeight()