I will be working with data from the Cuprapca station.
#dowload data
url <- "https://noaadata.apps.nsidc.org/NOAA/G02141/uni.cuprapca.24768.dat"
download.file(url,destfile='data.dat',method='curl')
cuprapca <- read.table('data.dat',sep="",na.strings="999.99")
#Clean Data
cuprapca_clean <- cuprapca %>%
select(
year = V2,
month = V3,
latitude= V7,
longitude =V8,
temp = V9
)
cuprapca_clean <- cuprapca_clean %>%
filter(!is.na(temp))
#Divide data into time periods for analysis
early_data <- cuprapca_clean %>%
filter(year >= 1961 & year <= 1980)
late_data <- cuprapca_clean %>%
filter(year >= 1981 & year <= 2000)
full <- cuprapca_clean %>%
filter(year >= 1961 & year <= 2000)
#Calculate stats
early_stats <- early_data %>%
group_by(month) %>%
summarise(
early_mean = mean(temp),
early_median = median(temp)
)
late_stats <- late_data %>%
group_by(month) %>%
summarise(
late_mean = mean(temp),
late_median = median(temp)
)
full_stats <- full %>%
group_by(month) %>%
summarise(
full_mean = mean(temp),
full_median = median(temp),
sd = sd(temp)
)
#join all stats into a final table
final_table <- full_stats %>%
left_join(early_stats, by = "month") %>%
left_join(late_stats, by = "month")
#Montly mean temperature
bars <- full_stats
# Define ymin
ymin <- floor(min(bars$full_mean, na.rm = TRUE) / 10) * 10
# Shift values so all bars go up
bars_shift <- bars$full_mean - ymin
# Plot
barplot(bars_shift,
yaxt = "n",
names.arg = bars$month,
col = "steelblue",
main = "Monthly Mean Temperature",
xlab = "Month",
ylab = "Temp (°C)")
# Create y-axis labels in original temperature scale
ymax <- ceiling(max(bars$full_mean, na.rm = TRUE) / 10) * 10
yticks <- seq(0, ymax - ymin, by = 5)
axis(2, at = yticks, labels = yticks + ymin)
##Plot Mean vs Median
# Create matrix with mean and median
bars <- cbind(full_stats$full_mean, full_stats$full_median)
# Define ymin
ymin <- floor(min(bars, na.rm = TRUE) / 10) * 10
# Shift values so all bars go upward
bars_shift <- bars - ymin
# Plot side-by-side bars
barplot(t(bars_shift),
beside = TRUE,
yaxt = "n",
names.arg = full_stats$month,
col = c("steelblue", "orange"),
main = "Mean vs Median Temperature",
xlab = "Month",
ylab = "Temp (°C)")
# Create y-axis labels in original scale
ymax <- ceiling(max(bars, na.rm = TRUE) / 10) * 10
yticks <- seq(0, ymax - ymin, by = 5)
axis(2, at = yticks, labels = yticks + ymin)
# Add legend
legend("topright",
legend = c("Mean", "Median"),
fill = c("steelblue", "orange"))
Early include the years (1961 - 1980) Late include the years (1981 - 2000)
#Early vs Late plot
# Combine early and late means into a matrix
bars <- cbind(early_stats$early_mean, late_stats$late_mean)
# Define ymin
ymin <- floor(min(bars, na.rm = TRUE) / 10) * 10
# Shift values so all bars go upward
bars_shift <- bars - ymin
# Plot side-by-side bars
barplot(t(bars_shift),
beside = TRUE,
yaxt = "n",
names.arg = early_stats$month,
col = c("steelblue", "tomato"),
main = "Early vs Late Temperature Comparison",
xlab = "Month",
ylab = "Temp (°C)")
# Create y-axis labels in original scale
ymax <- ceiling(max(bars, na.rm = TRUE) / 10) * 10
yticks <- seq(0, ymax - ymin, by = 5)
axis(2, at = yticks, labels = yticks + ymin)
# Add legend
legend("topright",
legend = c("1961–1980", "1981–2000"),
fill = c("steelblue", "tomato"))
# Mean and sd plot
bars <- full_stats$full_mean
sd_vals <- full_stats$sd
# Define ymin
ymin <- floor(min(bars - sd_vals, na.rm = TRUE) / 10) * 10
# Shift values
bars_shift <- bars - ymin
# Plot bars
bp <- barplot(bars_shift,
yaxt = "n",
names.arg = full_stats$month,
col = "steelblue",
main = "Monthly Mean Temperature with SD",
xlab = "Month",
ylab = "Temp (°C)")
# Add error bars (SD)
arrows(x0 = bp,
y0 = (bars - sd_vals) - ymin,
x1 = bp,
y1 = (bars + sd_vals) - ymin,
angle = 90,
code = 3,
length = 0.05)
# Create y-axis labels in original scale
ymax <- ceiling(max(bars + sd_vals, na.rm = TRUE) / 10) * 10
yticks <- seq(0, ymax - ymin, by = 5)
axis(2, at = yticks, labels = yticks + ymin)