Nothing
## ----setup, include = FALSE---------------------------------------------------
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.width = 7,
fig.height = 4,
fig.align = "center",
dpi = 150,
warning = FALSE,
message = FALSE
)
## ----install, eval = FALSE----------------------------------------------------
# install.packages("rmet")
#
# # Development version:
# # install.packages("pak")
# # pak::pak("rodrigosqrt3/rmet")
## ----library------------------------------------------------------------------
library(rmet)
## ----stations, eval = FALSE---------------------------------------------------
# stations <- inmet_stations(state = "RS", status = "Operante")
# head(stations[, c("station_code", "station_name", "latitude",
# "longitude", "elevation", "status")])
## ----download, eval = FALSE---------------------------------------------------
# # Downloads the 2023 archive (~70 MB) to the default cache directory.
# # Safe to re-run — skips files that are already complete.
# inmet_download(2023)
## ----cache, eval = FALSE------------------------------------------------------
# inmet_cache_status()
## ----read, eval = FALSE-------------------------------------------------------
# df <- inmet_read(
# years = 2023,
# stations = "A801",
# start_date = "2023-01-01",
# end_date = "2023-12-31"
# )
## ----load-data----------------------------------------------------------------
df <- rmet_example
str(df[, c("datetime", "station_code", "state",
"temp_dry_c", "precip_mm", "humid_rel_pct",
"wind_speed_ms", "pressure_station_hpa")])
## ----daily-agg----------------------------------------------------------------
df$date <- as.Date(df$datetime)
daily <- aggregate(
cbind(temp_dry_c, precip_mm, humid_rel_pct, wind_speed_ms) ~ date,
data = df,
FUN = function(x) mean(x, na.rm = TRUE)
)
daily$temp_max <- aggregate(temp_dry_c ~ date, df, max, na.rm = TRUE)$temp_dry_c
daily$temp_min <- aggregate(temp_dry_c ~ date, df, min, na.rm = TRUE)$temp_dry_c
daily$precip <- aggregate(precip_mm ~ date, df, sum, na.rm = TRUE)$precip_mm
daily$month <- as.integer(format(daily$date, "%m"))
## ----plot-temp, fig.cap = "Daily temperature range at Porto Alegre (A801) — 2023."----
col_max <- "#E74C3C"
col_min <- "#3498DB"
col_band <- "#F1948A"
oldpar <- par(mar = c(4, 4.5, 3, 1), family = "sans", cex.lab = 0.95, cex.axis = 0.85)
plot(
daily$date, daily$temp_max,
type = "n",
ylim = range(c(daily$temp_min, daily$temp_max), na.rm = TRUE),
xlab = "",
ylab = "Temperature (\u00b0C)",
main = "Daily Temperature Range \u2014 Porto Alegre (A801), 2023",
axes = FALSE
)
polygon(
c(daily$date, rev(daily$date)),
c(daily$temp_max, rev(daily$temp_min)),
col = adjustcolor(col_band, alpha.f = 0.35),
border = NA
)
lines(daily$date, daily$temp_max, col = col_max, lwd = 1.2)
lines(daily$date, daily$temp_min, col = col_min, lwd = 1.2)
axis(1,
at = seq(min(daily$date), max(daily$date), by = "2 months"),
labels = format(seq(min(daily$date), max(daily$date), by = "2 months"), "%b"),
las = 1)
axis(2, las = 1)
box(col = "grey80")
legend(
"topright",
legend = c("Daily max", "Daily min"),
col = c(col_max, col_min),
lwd = 2,
bty = "n",
cex = 0.85
)
par(oldpar)
## ----plot-precip, fig.cap = "Daily accumulated precipitation at Porto Alegre (A801) — 2023."----
col_prec <- "#3498DB"
oldpar <- par(mar = c(4, 4.5, 3, 1), family = "sans", cex.lab = 0.95, cex.axis = 0.85)
barplot(
daily$precip,
col = adjustcolor(col_prec, alpha.f = 0.75),
border = NA,
space = 0,
xlab = "",
ylab = "Precipitation (mm)",
main = "Daily Precipitation \u2014 Porto Alegre (A801), 2023",
axes = FALSE
)
axis(2, las = 1)
# Month labels on x axis
month_starts <- which(!duplicated(format(daily$date, "%m")))
axis(1,
at = month_starts,
labels = format(daily$date[month_starts], "%b"),
tick = FALSE)
box(col = "grey80")
par(oldpar)
## ----plot-seasonal, fig.cap = "Seasonal cycle of hourly dry-bulb temperature at Porto Alegre (A801) — 2023."----
col_box <- "#E74C3C"
df$month <- as.integer(format(df$datetime, "%m"))
month_labels <- c("Jan","Feb","Mar","Apr","May","Jun",
"Jul","Aug","Sep","Oct","Nov","Dec")
oldpar <- par(mar = c(4, 4.5, 3, 1), family = "sans", cex.lab = 0.95, cex.axis = 0.85)
boxplot(
temp_dry_c ~ month,
data = df,
col = adjustcolor(col_box, alpha.f = 0.40),
border = col_box,
names = month_labels,
xlab = "Month",
ylab = "Dry-bulb temperature (\u00b0C)",
main = "Temperature Seasonality \u2014 Porto Alegre (A801), 2023",
outline = FALSE,
whisklty = 1,
medlwd = 2,
axes = FALSE
)
axis(1, at = 1:12, labels = month_labels, las = 1)
axis(2, las = 1)
box(col = "grey80")
par(oldpar)
## ----plot-wind, fig.cap = "Distribution of hourly wind speed at Porto Alegre (A801) — 2023."----
col_wind <- "#2C3E50"
ws <- df$wind_speed_ms[!is.na(df$wind_speed_ms) & df$wind_speed_ms >= 0]
oldpar <- par(mar = c(4, 4.5, 3, 1), family = "sans", cex.lab = 0.95, cex.axis = 0.85)
h <- hist(ws, breaks = 30, plot = FALSE)
plot(h,
col = adjustcolor(col_wind, alpha.f = 0.55),
border = "white",
xlab = "Wind speed (m/s)",
ylab = "Frequency",
main = "Wind Speed Distribution \u2014 Porto Alegre (A801), 2023",
axes = FALSE)
abline(v = mean(ws),
col = "#E74C3C",
lwd = 2,
lty = 2)
axis(1, las = 1)
axis(2, las = 1)
box(col = "grey80")
legend("topright",
legend = paste0("Mean: ", round(mean(ws), 1), " m/s"),
col = "#E74C3C",
lwd = 2,
lty = 2,
bty = "n",
cex = 0.85)
par(oldpar)
## ----filter, eval = FALSE-----------------------------------------------------
# # Only summer months (December–February), temperature and humidity
# summer <- inmet_read(
# years = 2023,
# stations = "A801",
# start_date = "2023-12-01",
# end_date = "2023-12-31",
# variables = c("temp_dry_c", "humid_rel_pct")
# )
#
# # Multiple stations across Rio Grande do Sul
# rs_stations <- inmet_read(
# years = 2023,
# stations = c("A801", "A802", "A827"),
# variables = c("temp_dry_c", "precip_mm")
# )
## ----extract, eval = FALSE----------------------------------------------------
# inmet_extract(
# years = 2023,
# out_dir = file.path(tempdir(), "inmet_csv")
# )
## ----cache-mgmt, eval = FALSE-------------------------------------------------
# # See what is cached and how large each file is
# inmet_cache_status()
#
# # Remove all cached archives to free disk space
# inmet_cache_clear()
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.