Skip to content

Room2: volcano script added #11

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 58 additions & 0 deletions snippets/volcano_analysis.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
library(tidyverse)
library(lubridate)
library(ggplot2)
library(maps)
library(patchwork)

#' This is script with analysis of volcanos for my
#' geological article.

volcano <- readr::read_csv('https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2020/2020-05-12/volcano.csv')
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

import readr separately


processed_volcano <- volcano %>%
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

good use of pipes

mutate(logpop10 = log10(population_within_10_km+0.1)) %>%
select(primary_volcano_type, pop=logpop10, longitude, latitude)

# cleaning data a bit as there are some plural versions of volcano names
# that mean essentially the same
processed_volcano$primary_volcano_type <-
recode(processed_volcano$primary_volcano_type, Stratovolcano="Stratovolcano(es)")

processed_volcano$primary_volcano_type <-
recode(processed_volcano$primary_volcano_type, `Shield(s)`="Shield")

Comment on lines +18 to +23
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

use mutate for these steps too

volcano_types <- processed_volcano %>% group_by(primary_volcano_type) %>%
summarise(count = n()) %>%
arrange(desc(count)) %>% head(8)

# NA types become Other as we want to include them in the analysis
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same as in line 18

processed_volcano$primary_volcano_type <- processed_volcano$primary_volcano_type %>%
replace_na("Other")

sc_max <- max(processed_volcano$pop)
sc_min <- min(processed_volcano$pop)

col_palette = c("#d11141", "#00b159", "#00aedb", "#f37735", "#ffc425",
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

define constants on the top and keep them upper case

"#3aefaf", "#0b57dd", "#f666b7", "#cf1833", "#a35c0a",
"#bc0bfe", "#61ff41", "#eabf72", "#09dbc3", "#ffffff")

do_map = function(vulc_type, colid = NULL) {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the function contains too many magic numbers

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

use <- for assignments

dotcol <- ifelse(is.null(colid), "#fdff00", col_palette[colid])
processed_volcano %>%
filter(primary_volcano_type == vulc_type) %>%
ggplot(aes(longitude, latitude, size = pop)) +
borders(colour = "#396067", fill = "#383949") +
geom_point(shape = 16, colour = dotcol, fill = "#ff5800", alpha = 0.6) +
scale_radius(range = c(1, 8), limits = c(sc_min, sc_max)) +
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

these are defined outside the function

theme(legend.position = "none",
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

split plotting into a separate function

plot.background = element_rect(fill = "#2b272e"),
plot.title = element_text(color = "white", size = 12, face = "bold")) +
ggtitle(paste("Volcano type: ", vulc_type))
}


plot.list <- lapply(seq(1, length(volcano_types$primary_volcano_type)),
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

break this lapply into separate lines for readability

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

use _ instead of . in variable names

function(i) do_map(volcano_types$primary_volcano_type[i], i))

plt <- wrap_plots(plot.list, nrow = 2)
ggsave("plot.pdf", plot = plt)