Story 5: “What Is The Effect Of The Earth’s Temperature on Cyclonic Storms?”

As global temperatures rise, we’re seeing more intense and frequent cyclonic storms, including hurricanes, typhoons, and tornadoes. But how are these storms connected to warming temperatures? In this presentation, we’ll explore data from the past to understand how changes in Earth’s temperature may be influencing the occurrence and strength of these storms. Through visuals and analysis, we’ll examine how climate change might be driving more extreme weather events.

What are Cyclonic Storms?

Difference between Cyclonic Storms and Tornadoes

Data

For this analysis, we sourced two key datasets: global temperature data and storm occurrence data. The global temperature data, covering the past 25 years, was obtained from the Met Office Hadley Centre (2024), processed by Our World in Data. Temperature anomalies are given in degrees Celsius relative to the average temperature over the period 1961-1990. Storm occurrence and intensity data, including hurricanes, cyclones, and typhoons, were sourced from the National Hurricane Center (NHC), while tornado data was obtained from the National Centers for Environmental Information (NCEI). These datasets include information on the frequency and intensity of storms, allowing us to examine potential correlations with global temperature trends.

library(dplyr)
library(ggplot2)
library(maps)

temp <- read.csv("https://raw.githubusercontent.com/suswong/DATA-608/refs/heads/main/temperature-anomaly.csv")
hurri_typh <- read.csv("https://raw.githubusercontent.com/suswong/DATA-608/refs/heads/main/hurricanes.csv")
tornado <- read.csv("https://raw.githubusercontent.com/suswong/DATA-608/refs/heads/main/NCEI%20US%20Tornado.csv")

Global Temperature Increasing Over Time

global_data <- temp %>%
  filter(Entity == "Global")

ggplot(global_data, aes(x = Year, y = `Global.average.temperature.anomaly.relative.to.1961.1990`)) +
  geom_line(color = "blue") +     
  labs(title = "Global Temperature Increasing Over Time",
       x = "Year",
       y = "Temperature Anomaly (°C)") +  # Close the parenthesis for the y argument
  theme_minimal() +             
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Number of Tornadoes Increasing Over Time

ggplot(tornado, aes(x = Year)) +
  geom_line(aes(y = Tornadoes, color = "Tornadoes"), size = 1) +
  geom_smooth(aes(y = Tornadoes, color = "Tornadoes"), method = "loess", se = FALSE, linetype = "dashed") +
  labs(title = "Number of Tornadoes Increasing Over Time",
       x = "Year",
       y = "Count",
       color = "Legend") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Tropical Cyclones Rising Over Time

hurri_typh$hurricane_category <- ifelse(hurri_typh$max_wind >= 157, "Category 5",
                                        ifelse(hurri_typh$max_wind >= 130, "Category 4",
                                               ifelse(hurri_typh$max_wind >= 111, "Category 3",
                                                      ifelse(hurri_typh$max_wind >= 96, "Category 2",
                                                             ifelse(hurri_typh$max_wind >= 74, "Category 1", "Tropical Storm")))))

max_wind_data <- hurri_typh %>%
  group_by(id) %>%
  slice_max(max_wind, n = 1, with_ties = FALSE) 

hurricane_trends <- max_wind_data %>%
  group_by(year, hurricane_category) %>%
  summarise(count = n(), .groups = "drop")

ggplot(hurricane_trends, aes(x = year, y = count, color = hurricane_category)) +
  geom_point(size = 2, alpha = 0.5) + 
  geom_smooth(method = "loess", se = FALSE, size = 1) +  
  scale_color_manual(values = c(
    "Tropical Storm" = "#A6CEE3",  # Light cyan
    "Category 1" = "#1F78B4",     # Bright blue
    "Category 2" = "#33A02C",     # Green
    "Category 3" = "#FB9A99",     # Light pink
    "Category 4" = "#E31A1C",     # Red
    "Category 5" = "#6A3D9A"      # Dark blue
  )) +
  labs(title = "Tropical Cyclones Rising Over Time",
       x = "Year",
       y = "Number of Tropical Cyclones",
       color = "Tropical Cyclones Category") +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5),
    legend.position = "bottom",
    legend.title = element_text(size = 12),
    legend.text = element_text(size = 10)
  )

Major Tropical Cyclones Rising Over Time

major_storms <- max_wind_data %>%
  filter(max_wind >= 111)%>%
  group_by(year, hurricane_category) %>%
  summarise(count = n(), .groups = "drop")

ggplot(major_storms, aes(x = year, y = count, color = hurricane_category)) +
  geom_point(size = 2, alpha = 0.5) +  # Points for each category
  geom_smooth(method = "loess", se = FALSE, size = 1) +  # Smoothed lines
  scale_color_manual(values = c(
    "Tropical Storm" = "#A6CEE3",  # Light cyan
    "Category 1" = "#1F78B4",     # Bright blue
    "Category 2" = "#33A02C",     # Green
    "Category 3" = "#FB9A99",     # Light pink
    "Category 4" = "#E31A1C",     # Red
    "Category 5" = "#6A3D9A"      # Dark blue
  )) +
  labs(title = "Major Tropical Cyclones Rising Over Time",
       x = "Year",
       y = "Number of Major Tropical Cyclones",
       color = "Major Tropical Cyclones Category") +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5),
    legend.position = "bottom",
    legend.title = element_text(size = 12),
    legend.text = element_text(size = 10)
  )