Title: | Climate AEMET Tools |
---|---|
Description: | Tools to download the climatic data of the Spanish Meteorological Agency (AEMET) directly from R using their API and create scientific graphs (climate charts, trend analysis of climate time series, temperature and precipitation anomalies maps, warming stripes graphics, climatograms, etc.). |
Authors: | Manuel Pizarro [aut, cph] , Diego Hernangómez [aut, cre] (<https://orcid.org/0000-0001-8457-4658>, rOpenSpain), Gema Fernández-Avilés [aut] |
Maintainer: | Diego Hernangómez <[email protected]> |
License: | GPL-3 |
Version: | 1.4.0 |
Built: | 2024-12-08 08:26:25 UTC |
Source: | https://github.com/rOpenSpain/climaemet |
Get AEMET alert zones.
aemet_alert_zones(verbose = FALSE, return_sf = FALSE)
aemet_alert_zones(verbose = FALSE, return_sf = FALSE)
verbose |
Logical |
return_sf |
Logical |
The first result of the call on each session is (temporarily) cached in
the assigned tempdir()
for avoiding unneeded API calls.
https://www.aemet.es/es/eltiempo/prediccion/avisos/ayuda. See also Annex 2 and Annex 3 docs, linked in this page.
Other aemet_api_data:
aemet_alerts()
,
aemet_beaches()
,
aemet_daily_clim()
,
aemet_extremes_clim()
,
aemet_forecast_beaches()
,
aemet_forecast_daily()
,
aemet_forecast_fires()
,
aemet_last_obs()
,
aemet_monthly
,
aemet_normal
,
aemet_stations()
library(tibble) alert_zones <- aemet_alert_zones() alert_zones # Cached during this R session alert_zones2 <- aemet_alert_zones(verbose = TRUE) identical(alert_zones, alert_zones2) # Select an map beaches library(dplyr) library(ggplot2) # Galicia alert_zones_sf <- aemet_alert_zones(return_sf = TRUE) %>% filter(COD_CCAA == "71") # Coast zones are identified by a "C" in COD_Z alert_zones_sf$type <- ifelse(grepl("C$", alert_zones_sf$COD_Z), "Coast", "Mainland" ) ggplot(alert_zones_sf) + geom_sf(aes(fill = NOM_PROV)) + facet_wrap(~type) + scale_fill_brewer(palette = "Blues")
library(tibble) alert_zones <- aemet_alert_zones() alert_zones # Cached during this R session alert_zones2 <- aemet_alert_zones(verbose = TRUE) identical(alert_zones, alert_zones2) # Select an map beaches library(dplyr) library(ggplot2) # Galicia alert_zones_sf <- aemet_alert_zones(return_sf = TRUE) %>% filter(COD_CCAA == "71") # Coast zones are identified by a "C" in COD_Z alert_zones_sf$type <- ifelse(grepl("C$", alert_zones_sf$COD_Z), "Coast", "Mainland" ) ggplot(alert_zones_sf) + geom_sf(aes(fill = NOM_PROV)) + facet_wrap(~type) + scale_fill_brewer(palette = "Blues")
Get a database of current meteorological alerts.
aemet_alerts( ccaa = NULL, lang = c("es", "en"), verbose = FALSE, return_sf = FALSE, extract_metadata = FALSE, progress = TRUE )
aemet_alerts( ccaa = NULL, lang = c("es", "en"), verbose = FALSE, return_sf = FALSE, extract_metadata = FALSE, progress = TRUE )
ccaa |
A vector of names for autonomous communities or |
lang |
Language of the results. It can be |
verbose |
Logical |
return_sf |
Logical |
extract_metadata |
Logical |
progress |
Logical, display a |
https://www.aemet.es/en/eltiempo/prediccion/avisos.
https://www.aemet.es/es/eltiempo/prediccion/avisos/ayuda. See also Annex 2 and Annex 3 docs, linked in this page.
aemet_alert_zones()
. See also mapSpain::esp_codelist,
mapSpain::esp_dict_region_code()
to get the names of the
autonomous communities.
Other aemet_api_data:
aemet_alert_zones()
,
aemet_beaches()
,
aemet_daily_clim()
,
aemet_extremes_clim()
,
aemet_forecast_beaches()
,
aemet_forecast_daily()
,
aemet_forecast_fires()
,
aemet_last_obs()
,
aemet_monthly
,
aemet_normal
,
aemet_stations()
# Display names of CCAAs library(dplyr) aemet_alert_zones() %>% select(NOM_CCAA) %>% distinct() # Base map cbasemap <- mapSpain::esp_get_ccaa(ccaa = c( "Galicia", "Asturias", "Cantabria", "Euskadi" )) # Alerts alerts_north <- aemet_alerts( ccaa = c("Galicia", "Asturias", "Cantabria", "Euskadi"), return_sf = TRUE ) # If any alert if (inherits(alerts_north, "sf")) { library(ggplot2) library(lubridate) alerts_north$day <- date(alerts_north$effective) ggplot(alerts_north) + geom_sf(data = cbasemap, fill = "grey60") + geom_sf(aes(fill = `AEMET-Meteoalerta nivel`)) + geom_sf( data = cbasemap, fill = "transparent", color = "black", linewidth = 0.5 ) + facet_grid(vars(`AEMET-Meteoalerta fenomeno`), vars(day)) + scale_fill_manual(values = c( "amarillo" = "yellow", naranja = "orange", "rojo" = "red" )) }
# Display names of CCAAs library(dplyr) aemet_alert_zones() %>% select(NOM_CCAA) %>% distinct() # Base map cbasemap <- mapSpain::esp_get_ccaa(ccaa = c( "Galicia", "Asturias", "Cantabria", "Euskadi" )) # Alerts alerts_north <- aemet_alerts( ccaa = c("Galicia", "Asturias", "Cantabria", "Euskadi"), return_sf = TRUE ) # If any alert if (inherits(alerts_north, "sf")) { library(ggplot2) library(lubridate) alerts_north$day <- date(alerts_north$effective) ggplot(alerts_north) + geom_sf(data = cbasemap, fill = "grey60") + geom_sf(aes(fill = `AEMET-Meteoalerta nivel`)) + geom_sf( data = cbasemap, fill = "transparent", color = "black", linewidth = 0.5 ) + facet_grid(vars(`AEMET-Meteoalerta fenomeno`), vars(day)) + scale_fill_manual(values = c( "amarillo" = "yellow", naranja = "orange", "rojo" = "red" )) }
This function will store your AEMET API key on your local machine so it can be called securely without being stored in your code.
Alternatively, you can install the API Key manually:
Run Sys.setenv(AEMET_API_KEY = "Your_Key")
. You would need to run this
command on each session (Similar to install = FALSE
).
Write this line on your .Renviron file: AEMET_API_KEY = "Your_Key"
(same behavior than install = TRUE
). This would store your API key
permanently.
aemet_api_key(apikey, overwrite = FALSE, install = FALSE)
aemet_api_key(apikey, overwrite = FALSE, install = FALSE)
apikey |
The API key provided to you from the AEMET formatted in quotes. A key can be acquired at https://opendata.aemet.es/centrodedescargas/inicio. You can install several API Keys as a vector of characters, see Details. |
overwrite |
If this is set to |
install |
if |
You can pass several apikey
values as a vector c(api1, api2)
, in this
case several AEMET_API_KEY
values would be generated. In each subsequent
api call climaemet would randomly choose one of the provided
API keys.
This is useful when performing batch queries to avoid API throttling.
None
To locate your API Key on your local machine, run
rappdirs::user_cache_dir("climaemet", "R")
.
Other aemet_auth:
aemet_detect_api_key()
# Don't run these examples! if (FALSE) { aemet_api_key("111111abc", install = TRUE) # You can check it with: Sys.getenv("AEMET_API_KEY") } if (FALSE) { # If you need to overwrite an existing key: aemet_api_key("222222abc", overwrite = TRUE, install = TRUE) # You can check it with: Sys.getenv("AEMET_API_KEY") }
# Don't run these examples! if (FALSE) { aemet_api_key("111111abc", install = TRUE) # You can check it with: Sys.getenv("AEMET_API_KEY") } if (FALSE) { # If you need to overwrite an existing key: aemet_api_key("222222abc", overwrite = TRUE, install = TRUE) # You can check it with: Sys.getenv("AEMET_API_KEY") }
Get AEMET beaches.
aemet_beaches(verbose = FALSE, return_sf = FALSE)
aemet_beaches(verbose = FALSE, return_sf = FALSE)
verbose |
Logical |
return_sf |
Logical |
The first result of the API call on each session is (temporarily) cached in
the assigned tempdir()
for avoiding unneeded API calls.
You need to set your API Key globally using aemet_api_key()
.
Other aemet_api_data:
aemet_alert_zones()
,
aemet_alerts()
,
aemet_daily_clim()
,
aemet_extremes_clim()
,
aemet_forecast_beaches()
,
aemet_forecast_daily()
,
aemet_forecast_fires()
,
aemet_last_obs()
,
aemet_monthly
,
aemet_normal
,
aemet_stations()
library(tibble) beaches <- aemet_beaches() beaches # Cached during this R session beaches2 <- aemet_beaches(verbose = TRUE) identical(beaches, beaches2) # Select an map beaches library(dplyr) library(ggplot2) library(mapSpain) # Alicante / Alacant beaches_sf <- aemet_beaches(return_sf = TRUE) %>% filter(ID_PROVINCIA == "03") prov <- mapSpain::esp_get_prov("Alicante") ggplot(prov) + geom_sf() + geom_sf( data = beaches_sf, shape = 4, size = 2.5, color = "blue" )
library(tibble) beaches <- aemet_beaches() beaches # Cached during this R session beaches2 <- aemet_beaches(verbose = TRUE) identical(beaches, beaches2) # Select an map beaches library(dplyr) library(ggplot2) library(mapSpain) # Alicante / Alacant beaches_sf <- aemet_beaches(return_sf = TRUE) %>% filter(ID_PROVINCIA == "03") prov <- mapSpain::esp_get_prov("Alicante") ggplot(prov) + geom_sf() + geom_sf( data = beaches_sf, shape = 4, size = 2.5, color = "blue" )
Get climatology values for a station or for all the available stations.
Note that aemet_daily_period()
and aemet_daily_period_all()
are shortcuts
of aemet_daily_clim()
.
aemet_daily_clim( station = "all", start = Sys.Date() - 7, end = Sys.Date(), verbose = FALSE, return_sf = FALSE, extract_metadata = FALSE, progress = TRUE ) aemet_daily_period( station, start = as.integer(format(Sys.Date(), "%Y")), end = start, verbose = FALSE, return_sf = FALSE, extract_metadata = FALSE, progress = TRUE ) aemet_daily_period_all( start = as.integer(format(Sys.Date(), "%Y")), end = start, verbose = FALSE, return_sf = FALSE, extract_metadata = FALSE, progress = TRUE )
aemet_daily_clim( station = "all", start = Sys.Date() - 7, end = Sys.Date(), verbose = FALSE, return_sf = FALSE, extract_metadata = FALSE, progress = TRUE ) aemet_daily_period( station, start = as.integer(format(Sys.Date(), "%Y")), end = start, verbose = FALSE, return_sf = FALSE, extract_metadata = FALSE, progress = TRUE ) aemet_daily_period_all( start = as.integer(format(Sys.Date(), "%Y")), end = start, verbose = FALSE, return_sf = FALSE, extract_metadata = FALSE, progress = TRUE )
station |
Character string with station identifier code(s)
(see |
start , end
|
Character string with start and end date. See Details. |
verbose |
Logical |
return_sf |
Logical |
extract_metadata |
Logical |
progress |
Logical, display a |
start
and end
parameters should be:
For aemet_daily_clim()
: A Date
object or a string with format:
YYYY-MM-DD
("2020-12-31"
) coercible with as.Date()
.
For aemet_daily_period()
and aemet_daily_period_all()
: A string
representing the year(s) to be extracted: "2020"
, "2018"
.
You need to set your API Key globally using aemet_api_key()
.
Other aemet_api_data:
aemet_alert_zones()
,
aemet_alerts()
,
aemet_beaches()
,
aemet_extremes_clim()
,
aemet_forecast_beaches()
,
aemet_forecast_daily()
,
aemet_forecast_fires()
,
aemet_last_obs()
,
aemet_monthly
,
aemet_normal
,
aemet_stations()
library(tibble) obs <- aemet_daily_clim(c("9434", "3195")) glimpse(obs) # Metadata meta <- aemet_daily_clim(c("9434", "3195"), extract_metadata = TRUE) glimpse(meta$campos)
library(tibble) obs <- aemet_daily_clim(c("9434", "3195")) glimpse(obs) # Metadata meta <- aemet_daily_clim(c("9434", "3195"), extract_metadata = TRUE) glimpse(meta$campos)
The function would detect if an API Key is available on this session:
If an API Key is already set as an environment variable it would be preserved
If no environment variable has been set and you have stored permanently
an API Key using aemet_api_key()
, the latter would be loaded.
aemet_detect_api_key(...) aemet_show_api_key(...)
aemet_detect_api_key(...) aemet_show_api_key(...)
... |
Ignored |
TRUE
or FALSE
. aemet_show_api_key()
would display your stored API keys.
Other aemet_auth:
aemet_api_key()
aemet_detect_api_key() # CAUTION: This may reveal API Keys if (FALSE) { aemet_show_api_key() }
aemet_detect_api_key() # CAUTION: This may reveal API Keys if (FALSE) { aemet_show_api_key() }
Get recorded extreme values for a station.
aemet_extremes_clim( station = NULL, parameter = "T", verbose = FALSE, return_sf = FALSE, extract_metadata = FALSE, progress = TRUE )
aemet_extremes_clim( station = NULL, parameter = "T", verbose = FALSE, return_sf = FALSE, extract_metadata = FALSE, progress = TRUE )
station |
Character string with station identifier code(s)
(see |
parameter |
Character string as temperature ( |
verbose |
Logical |
return_sf |
Logical |
extract_metadata |
Logical |
progress |
Logical, display a |
A tibble
or a sf object. If the function
finds an error when parsing it would return the result as a list()
object.
You need to set your API Key globally using aemet_api_key()
.
Other aemet_api_data:
aemet_alert_zones()
,
aemet_alerts()
,
aemet_beaches()
,
aemet_daily_clim()
,
aemet_forecast_beaches()
,
aemet_forecast_daily()
,
aemet_forecast_fires()
,
aemet_last_obs()
,
aemet_monthly
,
aemet_normal
,
aemet_stations()
library(tibble) obs <- aemet_extremes_clim(c("9434", "3195")) glimpse(obs)
library(tibble) obs <- aemet_extremes_clim(c("9434", "3195")) glimpse(obs)
Get a database of daily weather forecasts for a beach. Beach database can
be accessed with aemet_beaches()
.
aemet_forecast_beaches( x, verbose = FALSE, return_sf = FALSE, extract_metadata = FALSE, progress = TRUE )
aemet_forecast_beaches( x, verbose = FALSE, return_sf = FALSE, extract_metadata = FALSE, progress = TRUE )
x |
A vector of beaches codes to extract. See |
verbose |
Logical |
return_sf |
Logical |
extract_metadata |
Logical |
progress |
Logical, display a |
You need to set your API Key globally using aemet_api_key()
.
aemet_beaches()
for beaches codes.
Other aemet_api_data:
aemet_alert_zones()
,
aemet_alerts()
,
aemet_beaches()
,
aemet_daily_clim()
,
aemet_extremes_clim()
,
aemet_forecast_daily()
,
aemet_forecast_fires()
,
aemet_last_obs()
,
aemet_monthly
,
aemet_normal
,
aemet_stations()
Other forecasts:
aemet_forecast_daily()
,
aemet_forecast_fires()
,
aemet_forecast_tidy()
# Forecast for beaches in Palma, Mallorca library(dplyr) library(ggplot2) palma_b <- aemet_beaches() %>% filter(ID_MUNICIPIO == "07040") forecast_b <- aemet_forecast_beaches(palma_b$ID_PLAYA) glimpse(forecast_b) ggplot(forecast_b) + geom_line(aes(fecha, tagua_valor1, color = nombre)) + facet_wrap(~nombre, ncol = 1) + labs( title = "Water temperature in beaches of Palma (ES)", subtitle = "Forecast 3-days", x = "Date", y = "Temperature (Celsius)", color = "Beach" )
# Forecast for beaches in Palma, Mallorca library(dplyr) library(ggplot2) palma_b <- aemet_beaches() %>% filter(ID_MUNICIPIO == "07040") forecast_b <- aemet_forecast_beaches(palma_b$ID_PLAYA) glimpse(forecast_b) ggplot(forecast_b) + geom_line(aes(fecha, tagua_valor1, color = nombre)) + facet_wrap(~nombre, ncol = 1) + labs( title = "Water temperature in beaches of Palma (ES)", subtitle = "Forecast 3-days", x = "Date", y = "Temperature (Celsius)", color = "Beach" )
Get a database of daily or hourly weather forecasts for a given municipality.
aemet_forecast_daily( x, verbose = FALSE, extract_metadata = FALSE, progress = TRUE ) aemet_forecast_hourly( x, verbose = FALSE, extract_metadata = FALSE, progress = TRUE )
aemet_forecast_daily( x, verbose = FALSE, extract_metadata = FALSE, progress = TRUE ) aemet_forecast_hourly( x, verbose = FALSE, extract_metadata = FALSE, progress = TRUE )
x |
A vector of municipality codes to extract. For convenience,
climaemet provides this data on the dataset aemet_munic
(see |
verbose |
Logical |
extract_metadata |
Logical |
progress |
Logical, display a |
Forecasts format provided by the AEMET API have a complex structure.
Although climaemet returns a tibble
, each
forecasted value is provided as a nested tibble
.
aemet_forecast_tidy()
helper function can unnest these values an provide a
single unnested tibble
for the requested variable.
If extract_metadata = TRUE
a simple tibble
describing
the value of each field of the forecast is returned.
A nested tibble
. Forecasted values can be
extracted with aemet_forecast_tidy()
. See also Details.
You need to set your API Key globally using aemet_api_key()
.
aemet_munic for municipality codes and mapSpain package for
working with sf
objects of municipalities (see
mapSpain::esp_get_munic()
and Examples).
Other aemet_api_data:
aemet_alert_zones()
,
aemet_alerts()
,
aemet_beaches()
,
aemet_daily_clim()
,
aemet_extremes_clim()
,
aemet_forecast_beaches()
,
aemet_forecast_fires()
,
aemet_last_obs()
,
aemet_monthly
,
aemet_normal
,
aemet_stations()
Other forecasts:
aemet_forecast_beaches()
,
aemet_forecast_fires()
,
aemet_forecast_tidy()
# Select a city data("aemet_munic") library(dplyr) munis <- aemet_munic %>% filter(municipio_nombre %in% c("Santiago de Compostela", "Lugo")) %>% pull(municipio) daily <- aemet_forecast_daily(munis) # Metadata meta <- aemet_forecast_daily(munis, extract_metadata = TRUE) glimpse(meta$campos) # Vars available aemet_forecast_vars_available(daily) # This is nested daily %>% select(municipio, fecha, nombre, temperatura) # Select and unnest daily_temp <- aemet_forecast_tidy(daily, "temperatura") # This is not daily_temp # Wrangle and plot daily_temp_end <- daily_temp %>% select( elaborado, fecha, municipio, nombre, temperatura_minima, temperatura_maxima ) %>% tidyr::pivot_longer(cols = contains("temperatura")) # Plot library(ggplot2) ggplot(daily_temp_end) + geom_line(aes(fecha, value, color = name)) + facet_wrap(~nombre, ncol = 1) + scale_color_manual( values = c("red", "blue"), labels = c("max", "min") ) + scale_x_date( labels = scales::label_date_short(), breaks = "day" ) + scale_y_continuous( labels = scales::label_comma(suffix = "º") ) + theme_minimal() + labs( x = "", y = "", color = "", title = "Forecast: 7-day temperature", subtitle = paste( "Forecast produced on", format(daily_temp_end$elaborado[1], usetz = TRUE) ) ) # Spatial with mapSpain library(mapSpain) library(sf) lugo_sf <- esp_get_munic(munic = "Lugo") %>% select(LAU_CODE) daily_temp_end_lugo_sf <- daily_temp_end %>% filter(nombre == "Lugo" & name == "temperatura_maxima") %>% # Join by LAU_CODE left_join(lugo_sf, by = c("municipio" = "LAU_CODE")) %>% st_as_sf() ggplot(daily_temp_end_lugo_sf) + geom_sf(aes(fill = value)) + facet_wrap(~fecha) + scale_fill_gradientn( colors = c("blue", "red"), guide = guide_legend() ) + labs( main = "Forecast: 7-day max temperature", subtitle = "Lugo, ES" )
# Select a city data("aemet_munic") library(dplyr) munis <- aemet_munic %>% filter(municipio_nombre %in% c("Santiago de Compostela", "Lugo")) %>% pull(municipio) daily <- aemet_forecast_daily(munis) # Metadata meta <- aemet_forecast_daily(munis, extract_metadata = TRUE) glimpse(meta$campos) # Vars available aemet_forecast_vars_available(daily) # This is nested daily %>% select(municipio, fecha, nombre, temperatura) # Select and unnest daily_temp <- aemet_forecast_tidy(daily, "temperatura") # This is not daily_temp # Wrangle and plot daily_temp_end <- daily_temp %>% select( elaborado, fecha, municipio, nombre, temperatura_minima, temperatura_maxima ) %>% tidyr::pivot_longer(cols = contains("temperatura")) # Plot library(ggplot2) ggplot(daily_temp_end) + geom_line(aes(fecha, value, color = name)) + facet_wrap(~nombre, ncol = 1) + scale_color_manual( values = c("red", "blue"), labels = c("max", "min") ) + scale_x_date( labels = scales::label_date_short(), breaks = "day" ) + scale_y_continuous( labels = scales::label_comma(suffix = "º") ) + theme_minimal() + labs( x = "", y = "", color = "", title = "Forecast: 7-day temperature", subtitle = paste( "Forecast produced on", format(daily_temp_end$elaborado[1], usetz = TRUE) ) ) # Spatial with mapSpain library(mapSpain) library(sf) lugo_sf <- esp_get_munic(munic = "Lugo") %>% select(LAU_CODE) daily_temp_end_lugo_sf <- daily_temp_end %>% filter(nombre == "Lugo" & name == "temperatura_maxima") %>% # Join by LAU_CODE left_join(lugo_sf, by = c("municipio" = "LAU_CODE")) %>% st_as_sf() ggplot(daily_temp_end_lugo_sf) + geom_sf(aes(fill = value)) + facet_wrap(~fecha) + scale_fill_gradientn( colors = c("blue", "red"), guide = guide_legend() ) + labs( main = "Forecast: 7-day max temperature", subtitle = "Lugo, ES" )
Get a SpatRaster
as provided by terra with the
daily meteorological risk level for wildfires.
aemet_forecast_fires( area = c("p", "c"), verbose = FALSE, extract_metadata = FALSE )
aemet_forecast_fires( area = c("p", "c"), verbose = FALSE, extract_metadata = FALSE )
area |
The area, being:
|
verbose |
Logical |
extract_metadata |
Logical |
The SpatRaster
provides 5 (factor()
)levels with the following meaning:
"1"
: Low risk.
"2"
: Moderate risk.
"3"
: High risk.
"4"
: Very high risk.
"5"
: Extreme risk.
The resulting object has several layers, each one representing the forecast
for the upcoming 7 days. It also has additional attributes provided by the
terra package, such as terra::time()
and terra::coltab()
.
A tibble
or a SpatRaster
object.
https://www.aemet.es/en/eltiempo/prediccion/incendios.
Other aemet_api_data:
aemet_alert_zones()
,
aemet_alerts()
,
aemet_beaches()
,
aemet_daily_clim()
,
aemet_extremes_clim()
,
aemet_forecast_beaches()
,
aemet_forecast_daily()
,
aemet_last_obs()
,
aemet_monthly
,
aemet_normal
,
aemet_stations()
Other forecasts:
aemet_forecast_beaches()
,
aemet_forecast_daily()
,
aemet_forecast_tidy()
aemet_forecast_fires(extract_metadata = TRUE) # Extract alerts alerts <- aemet_forecast_fires() alerts # Nice plotting with terra library(terra) plot(alerts) # Zoom in an area cyl <- mapSpain::esp_get_ccaa("Castilla y Leon", epsg = 4326) # SpatVector cyl <- vect(cyl) fires_cyl <- crop(alerts, cyl) plot(fires_cyl[[1]]) plot(cyl, add = TRUE)
aemet_forecast_fires(extract_metadata = TRUE) # Extract alerts alerts <- aemet_forecast_fires() alerts # Nice plotting with terra library(terra) plot(alerts) # Zoom in an area cyl <- mapSpain::esp_get_ccaa("Castilla y Leon", epsg = 4326) # SpatVector cyl <- vect(cyl) fires_cyl <- crop(alerts, cyl) plot(fires_cyl[[1]]) plot(cyl, add = TRUE)
Helpers for aemet_forecast_daily()
and aemet_forecast_hourly()
:
aemet_forecast_vars_available()
extracts the values available on
the dataset.
aemet_forecast_tidy()
produces a tibble
with the
forecast for var
.
aemet_forecast_tidy(x, var) aemet_forecast_vars_available(x)
aemet_forecast_tidy(x, var) aemet_forecast_vars_available(x)
x |
A database extracted with |
var |
Name of the desired var to extract |
A vector of characters (aemet_forecast_vars_available()
)
or a tibble
(aemet_forecast_tidy()
).
Other forecasts:
aemet_forecast_beaches()
,
aemet_forecast_daily()
,
aemet_forecast_fires()
# Hourly values hourly <- aemet_forecast_hourly(c("15030", "28080")) # Vars available aemet_forecast_vars_available(hourly) # Get temperature temp <- aemet_forecast_tidy(hourly, "temperatura") library(dplyr) # Make hour - Need lubridate to adjust timezones temp_end <- temp %>% mutate( forecast_time = lubridate::force_tz( as.POSIXct(fecha) + hora, tz = "Europe/Madrid" ) ) # Add also sunset and sunrise suns <- temp_end %>% select(nombre, fecha, orto, ocaso) %>% distinct_all() %>% group_by(nombre) %>% mutate( ocaso_end = lubridate::force_tz( as.POSIXct(fecha) + ocaso, tz = "Europe/Madrid" ), orto_end = lubridate::force_tz( as.POSIXct(fecha) + orto, tz = "Europe/Madrid" ), orto_lead = lead(orto_end) ) %>% tidyr::drop_na() # Plot library(ggplot2) ggplot(temp_end) + geom_rect(data = suns, aes( xmin = ocaso_end, xmax = orto_lead, ymin = min(temp_end$temperatura), ymax = max(temp_end$temperatura) ), alpha = .4) + geom_line(aes(forecast_time, temperatura), color = "blue4") + facet_wrap(~nombre, nrow = 2) + scale_x_datetime(labels = scales::label_date_short()) + scale_y_continuous(labels = scales::label_number(suffix = "º")) + labs( x = "", y = "", title = "Forecast: Temperature", subtitle = paste("Forecast produced on", format(temp_end$elaborado[1], usetz = TRUE )) )
# Hourly values hourly <- aemet_forecast_hourly(c("15030", "28080")) # Vars available aemet_forecast_vars_available(hourly) # Get temperature temp <- aemet_forecast_tidy(hourly, "temperatura") library(dplyr) # Make hour - Need lubridate to adjust timezones temp_end <- temp %>% mutate( forecast_time = lubridate::force_tz( as.POSIXct(fecha) + hora, tz = "Europe/Madrid" ) ) # Add also sunset and sunrise suns <- temp_end %>% select(nombre, fecha, orto, ocaso) %>% distinct_all() %>% group_by(nombre) %>% mutate( ocaso_end = lubridate::force_tz( as.POSIXct(fecha) + ocaso, tz = "Europe/Madrid" ), orto_end = lubridate::force_tz( as.POSIXct(fecha) + orto, tz = "Europe/Madrid" ), orto_lead = lead(orto_end) ) %>% tidyr::drop_na() # Plot library(ggplot2) ggplot(temp_end) + geom_rect(data = suns, aes( xmin = ocaso_end, xmax = orto_lead, ymin = min(temp_end$temperatura), ymax = max(temp_end$temperatura) ), alpha = .4) + geom_line(aes(forecast_time, temperatura), color = "blue4") + facet_wrap(~nombre, nrow = 2) + scale_x_datetime(labels = scales::label_date_short()) + scale_y_continuous(labels = scales::label_number(suffix = "º")) + labs( x = "", y = "", title = "Forecast: Temperature", subtitle = paste("Forecast produced on", format(temp_end$elaborado[1], usetz = TRUE )) )
Get last observation values for a station.
aemet_last_obs( station = "all", verbose = FALSE, return_sf = FALSE, extract_metadata = FALSE, progress = TRUE )
aemet_last_obs( station = "all", verbose = FALSE, return_sf = FALSE, extract_metadata = FALSE, progress = TRUE )
station |
Character string with station identifier code(s)
(see |
verbose |
Logical |
return_sf |
Logical |
extract_metadata |
Logical |
progress |
Logical, display a |
You need to set your API Key globally using aemet_api_key()
.
Other aemet_api_data:
aemet_alert_zones()
,
aemet_alerts()
,
aemet_beaches()
,
aemet_daily_clim()
,
aemet_extremes_clim()
,
aemet_forecast_beaches()
,
aemet_forecast_daily()
,
aemet_forecast_fires()
,
aemet_monthly
,
aemet_normal
,
aemet_stations()
library(tibble) obs <- aemet_last_obs(c("9434", "3195")) glimpse(obs)
library(tibble) obs <- aemet_last_obs(c("9434", "3195")) glimpse(obs)
Get monthly/annual climatology values for a station or all the stations.
aemet_monthly_period()
and aemet_monthly_period_all()
allows requests
that span several years.
aemet_monthly_clim( station = NULL, year = as.integer(format(Sys.Date(), "%Y")), verbose = FALSE, return_sf = FALSE, extract_metadata = FALSE, progress = TRUE ) aemet_monthly_period( station = NULL, start = as.integer(format(Sys.Date(), "%Y")), end = start, verbose = FALSE, return_sf = FALSE, extract_metadata = FALSE, progress = TRUE ) aemet_monthly_period_all( start = as.integer(format(Sys.Date(), "%Y")), end = start, verbose = FALSE, return_sf = FALSE, extract_metadata = FALSE, progress = TRUE )
aemet_monthly_clim( station = NULL, year = as.integer(format(Sys.Date(), "%Y")), verbose = FALSE, return_sf = FALSE, extract_metadata = FALSE, progress = TRUE ) aemet_monthly_period( station = NULL, start = as.integer(format(Sys.Date(), "%Y")), end = start, verbose = FALSE, return_sf = FALSE, extract_metadata = FALSE, progress = TRUE ) aemet_monthly_period_all( start = as.integer(format(Sys.Date(), "%Y")), end = start, verbose = FALSE, return_sf = FALSE, extract_metadata = FALSE, progress = TRUE )
station |
Character string with station identifier code(s)
(see |
year |
Numeric value as date (format: |
verbose |
Logical |
return_sf |
Logical |
extract_metadata |
Logical |
progress |
Logical, display a |
start |
Numeric value as start year (format: |
end |
Numeric value as end year (format: |
You need to set your API Key globally using aemet_api_key()
.
Other aemet_api_data:
aemet_alert_zones()
,
aemet_alerts()
,
aemet_beaches()
,
aemet_daily_clim()
,
aemet_extremes_clim()
,
aemet_forecast_beaches()
,
aemet_forecast_daily()
,
aemet_forecast_fires()
,
aemet_last_obs()
,
aemet_normal
,
aemet_stations()
library(tibble) obs <- aemet_monthly_clim(station = c("9434", "3195"), year = 2000) glimpse(obs)
library(tibble) obs <- aemet_monthly_clim(station = c("9434", "3195"), year = 2000) glimpse(obs)
A tibble
with all the municipalities of Spain as
defined by the INE (Instituto Nacional de Estadistica) as of January 2024.
A tibble
with
8,132 rows and fields:
INE code of the municipality.
INE name of the municipality.
INE code of the province.
INE name of the province.
INE code of the autonomous community.
INE code of the autonomous community.
INE, Municipality codes by province
aemet_forecast_daily()
,
aemet_forecast_hourly()
Other dataset:
climaemet_9434_climatogram
,
climaemet_9434_temp
,
climaemet_9434_wind
data(aemet_munic) aemet_munic
data(aemet_munic) aemet_munic
Get normal climatology values for a station (or all the stations with
aemet_normal_clim_all()
. Standard climatology from 1981 to 2010.
aemet_normal_clim( station = NULL, verbose = FALSE, return_sf = FALSE, extract_metadata = FALSE, progress = TRUE ) aemet_normal_clim_all( verbose = FALSE, return_sf = FALSE, extract_metadata = FALSE, progress = TRUE )
aemet_normal_clim( station = NULL, verbose = FALSE, return_sf = FALSE, extract_metadata = FALSE, progress = TRUE ) aemet_normal_clim_all( verbose = FALSE, return_sf = FALSE, extract_metadata = FALSE, progress = TRUE )
station |
Character string with station identifier code(s)
(see |
verbose |
Logical |
return_sf |
Logical |
extract_metadata |
Logical |
progress |
Logical, display a |
You need to set your API Key globally using aemet_api_key()
.
Code modified from project https://github.com/SevillaR/aemet.
Other aemet_api_data:
aemet_alert_zones()
,
aemet_alerts()
,
aemet_beaches()
,
aemet_daily_clim()
,
aemet_extremes_clim()
,
aemet_forecast_beaches()
,
aemet_forecast_daily()
,
aemet_forecast_fires()
,
aemet_last_obs()
,
aemet_monthly
,
aemet_stations()
library(tibble) obs <- aemet_normal_clim(c("9434", "3195")) glimpse(obs)
library(tibble) obs <- aemet_normal_clim(c("9434", "3195")) glimpse(obs)
Get AEMET stations.
aemet_stations(verbose = FALSE, return_sf = FALSE)
aemet_stations(verbose = FALSE, return_sf = FALSE)
verbose |
Logical |
return_sf |
Logical |
The first result of the API call on each session is (temporarily) cached in
the assigned tempdir()
for avoiding unneeded API calls.
You need to set your API Key globally using aemet_api_key()
.
Code modified from project https://github.com/SevillaR/aemet.
Other aemet_api_data:
aemet_alert_zones()
,
aemet_alerts()
,
aemet_beaches()
,
aemet_daily_clim()
,
aemet_extremes_clim()
,
aemet_forecast_beaches()
,
aemet_forecast_daily()
,
aemet_forecast_fires()
,
aemet_last_obs()
,
aemet_monthly
,
aemet_normal
library(tibble) stations <- aemet_stations() stations # Cached during this R session stations2 <- aemet_stations(verbose = TRUE) identical(stations, stations2)
library(tibble) stations <- aemet_stations() stations # Cached during this R session stations2 <- aemet_stations(verbose = TRUE) identical(stations, stations2)
Normal data for Zaragoza Airport (1981-2010). This is an example dataset used to plot climatograms.
A data.frame with columns 1 to 12 (months) and rows:
Precipitation (mm).
Maximum temperature (Celsius).
Minimum temperature (Celsius).
Absolute monthly minimum temperature (Celsius).
AEMET.
ggclimat_walter_lieth()
, climatogram_period()
,
climatogram_normal()
Other dataset:
aemet_munic
,
climaemet_9434_temp
,
climaemet_9434_wind
Other climatogram:
climatogram_normal()
,
climatogram_period()
,
ggclimat_walter_lieth()
data(climaemet_9434_climatogram)
data(climaemet_9434_climatogram)
Yearly observations of average temperature for Zaragoza Airport (1950-2020). This is an example dataset.
A tibble
with columns:
Year of reference.
Identifier of the station.
Average temperature (Celsius).
AEMET.
Other dataset:
aemet_munic
,
climaemet_9434_climatogram
,
climaemet_9434_wind
Other stripes:
climatestripes_station()
,
ggstripes()
data(climaemet_9434_temp)
data(climaemet_9434_temp)
Daily observations of wind speed and directions for Zaragoza Airport (2000-2020). This is an example dataset.
A tibble
with columns:
Date of observation.
Wind directions (0-360).
Average wind speed (km/h)
AEMET.
Other dataset:
aemet_munic
,
climaemet_9434_climatogram
,
climaemet_9434_temp
Other wind:
ggwindrose()
,
windrose_days()
,
windrose_period()
data(climaemet_9434_wind)
data(climaemet_9434_wind)
Plot climate stripes graph for a station.
climatestripes_station( station, start = 1950, end = 2020, with_labels = "yes", verbose = FALSE, ... )
climatestripes_station( station, start = 1950, end = 2020, with_labels = "yes", verbose = FALSE, ... )
station |
Character string with station identifier code(s)
(see |
start |
Numeric value as start year (format: |
end |
Numeric value as end year (format: |
with_labels |
Character string as yes/no. Indicates whether to use labels for the graph or not. |
verbose |
Logical |
... |
Arguments passed on to
|
A ggplot2 object
You need to set your API Key globally using aemet_api_key()
.
Other aemet_plots:
climatogram_normal()
,
climatogram_period()
,
ggclimat_walter_lieth()
,
ggstripes()
,
ggwindrose()
,
windrose_days()
,
windrose_period()
Other stripes:
climaemet_9434_temp
,
ggstripes()
climatestripes_station( "9434", start = 2010, end = 2020, with_labels = "yes", col_pal = "Inferno" )
climatestripes_station( "9434", start = 2010, end = 2020, with_labels = "yes", col_pal = "Inferno" )
Plot of a Walter & Lieth climatic diagram from normal climatology data for a station. This climatogram are great for showing a summary of climate conditions for a place over a time period (1981-2010).
climatogram_normal( station, labels = "en", verbose = FALSE, ggplot2 = TRUE, ... )
climatogram_normal( station, labels = "en", verbose = FALSE, ggplot2 = TRUE, ... )
station |
Character string with station identifier code(s)
(see |
labels |
Character string as month labels for the X axis: |
verbose |
Logical |
ggplot2 |
|
... |
Further arguments to
|
A plot.
You need to set your API Key globally using aemet_api_key()
.
The code is based on code from the CRAN package climatol.
Walter, H. K., Harnickell, E., Lieth, F. H. H., & Rehder, H. (1967). Klimadiagramm-weltatlas. Jena: Fischer, 1967.
Guijarro J. A. (2023). climatol: Climate Tools (Series Homogenization and Derived Products). R package version 4.0.0, https://climatol.eu.
Other aemet_plots:
climatestripes_station()
,
climatogram_period()
,
ggclimat_walter_lieth()
,
ggstripes()
,
ggwindrose()
,
windrose_days()
,
windrose_period()
Other climatogram:
climaemet_9434_climatogram
,
climatogram_period()
,
ggclimat_walter_lieth()
climatogram_normal("9434")
climatogram_normal("9434")
Plot of a Walter & Lieth climatic diagram from monthly climatology data for a station. This climatogram are great for showing a summary of climate conditions for a place over a specific time period.
climatogram_period( station = NULL, start = 1990, end = 2020, labels = "en", verbose = FALSE, ggplot2 = TRUE, ... )
climatogram_period( station = NULL, start = 1990, end = 2020, labels = "en", verbose = FALSE, ggplot2 = TRUE, ... )
station |
Character string with station identifier code(s)
(see |
start |
Numeric value as start year (format: |
end |
Numeric value as end year (format: |
labels |
Character string as month labels for the X axis: |
verbose |
Logical |
ggplot2 |
|
... |
Further arguments to
|
A plot.
You need to set your API Key globally using aemet_api_key()
.
The code is based on code from the CRAN package climatol.
Walter, H. K., Harnickell, E., Lieth, F. H. H., & Rehder, H. (1967). Klimadiagramm-weltatlas. Jena: Fischer, 1967.
Guijarro J. A. (2023). climatol: Climate Tools (Series Homogenization and Derived Products). R package version 4.0.0, https://climatol.eu.
Other aemet_plots:
climatestripes_station()
,
climatogram_normal()
,
ggclimat_walter_lieth()
,
ggstripes()
,
ggwindrose()
,
windrose_days()
,
windrose_period()
Other climatogram:
climaemet_9434_climatogram
,
climatogram_normal()
,
ggclimat_walter_lieth()
climatogram_period("9434", start = 2015, end = 2020, labels = "en")
climatogram_period("9434", start = 2015, end = 2020, labels = "en")
dms
format to decimal degreesConverts degrees, minutes and seconds to decimal degrees.
dms2decdegrees(input = NULL) dms2decdegrees_2(input = NULL)
dms2decdegrees(input = NULL) dms2decdegrees_2(input = NULL)
input |
Character string as |
A numeric value.
Code for dms2decdegrees()
modified from project
https://github.com/SevillaR/aemet.
Other helpers:
climaemet_news()
,
first_day_of_year()
dms2decdegrees("055245W") dms2decdegrees_2("-3º 40' 37\"")
dms2decdegrees("055245W") dms2decdegrees_2("-3º 40' 37\"")
Get first and last day of year.
first_day_of_year(year = NULL) last_day_of_year(year = NULL)
first_day_of_year(year = NULL) last_day_of_year(year = NULL)
year |
Numeric value as year (format: YYYY). |
Character string as date (format: YYYY-MM-DD).
Other helpers:
climaemet_news()
,
dms2decdegrees()
first_day_of_year(2000) last_day_of_year(2020)
first_day_of_year(2000) last_day_of_year(2020)
Client tool to get data and metadata from AEMET and convert json to
tibble
.
get_data_aemet(apidest, verbose = FALSE) get_metadata_aemet(apidest, verbose = FALSE)
get_data_aemet(apidest, verbose = FALSE) get_metadata_aemet(apidest, verbose = FALSE)
apidest |
Character string as destination URL. See https://opendata.aemet.es/dist/index.html. |
verbose |
Logical |
A tibble
(if possible) or the results of the query as
provided by httr2::resp_body_raw()
or httr2::resp_body_string()
.
https://opendata.aemet.es/dist/index.html.
Some examples on how to use these functions on
vignette("extending-climaemet")
.
# Run this example only if AEMET_API_KEY is detected url <- "/api/valores/climatologicos/inventarioestaciones/todasestaciones" get_data_aemet(url) # Metadata get_metadata_aemet(url) # We can get data from any API endpoint # Plain text plain <- get_data_aemet("/api/prediccion/nacional/hoy") cat(plain) # An image image <- get_data_aemet("/api/mapasygraficos/analisis") # Write and read tmp <- tempfile(fileext = ".gif") writeBin(image, tmp) gganimate::gif_file(tmp)
# Run this example only if AEMET_API_KEY is detected url <- "/api/valores/climatologicos/inventarioestaciones/todasestaciones" get_data_aemet(url) # Metadata get_metadata_aemet(url) # We can get data from any API endpoint # Plain text plain <- get_data_aemet("/api/prediccion/nacional/hoy") cat(plain) # An image image <- get_data_aemet("/api/mapasygraficos/analisis") # Write and read tmp <- tempfile(fileext = ".gif") writeBin(image, tmp) gganimate::gif_file(tmp)
Plot of a Walter and Lieth climatic diagram of a station. This function is
an updated version of climatol::diagwl()
, by Jose A. Guijarro.
ggclimat_walter_lieth( dat, est = "", alt = NA, per = NA, mlab = "es", pcol = "#002F70", tcol = "#ff0000", pfcol = "#9BAEE2", sfcol = "#3C6FC4", shem = FALSE, p3line = FALSE, ... )
ggclimat_walter_lieth( dat, est = "", alt = NA, per = NA, mlab = "es", pcol = "#002F70", tcol = "#ff0000", pfcol = "#9BAEE2", sfcol = "#3C6FC4", shem = FALSE, p3line = FALSE, ... )
dat |
Monthly climatic data for which the diagram will be plotted. |
est |
Name of the climatological station. |
alt |
Altitude of the climatological station. |
per |
Period on which the averages have been computed. |
mlab |
Month labels for the X axis. Use 2-digit language code ( |
pcol |
Color for precipitation. |
tcol |
Color for temperature. |
pfcol |
Fill color for probable frosts. |
sfcol |
Fill color for sure frosts. |
shem |
Set to |
p3line |
Set to |
... |
Other graphic parameters |
See Details on climatol::diagwl()
.
Climatic data must be passed as a 4x12 matrix or data.frame
of monthly
(January to December) data, in the following order:
Row 1: Mean precipitation.
Row 2: Mean maximum daily temperature.
Row 3: Mean minimum daily temperature.
Row 4: Absolute monthly minimum temperature.
See climaemet_9434_climatogram for a sample dataset.
A ggplot2 object. See help("ggplot2")
.
You need to set your API Key globally using aemet_api_key()
.
Walter, H. K., Harnickell, E., Lieth, F. H. H., & Rehder, H. (1967). Klimadiagramm-weltatlas. Jena: Fischer, 1967.
climatol::diagwl()
, readr::locale()
Other aemet_plots:
climatestripes_station()
,
climatogram_normal()
,
climatogram_period()
,
ggstripes()
,
ggwindrose()
,
windrose_days()
,
windrose_period()
Other climatogram:
climaemet_9434_climatogram
,
climatogram_normal()
,
climatogram_period()
library(ggplot2) wl <- ggclimat_walter_lieth( climaemet::climaemet_9434_climatogram, alt = "249", per = "1981-2010", est = "Zaragoza Airport" ) wl # As it is a ggplot object we can modify it wl + theme( plot.background = element_rect(fill = "grey80"), panel.background = element_rect(fill = "grey70"), axis.text.y.left = element_text( colour = "black", face = "italic" ), axis.text.y.right = element_text( colour = "black", face = "bold" ) )
library(ggplot2) wl <- ggclimat_walter_lieth( climaemet::climaemet_9434_climatogram, alt = "249", per = "1981-2010", est = "Zaragoza Airport" ) wl # As it is a ggplot object we can modify it wl + theme( plot.background = element_rect(fill = "grey80"), panel.background = element_rect(fill = "grey70"), axis.text.y.left = element_text( colour = "black", face = "italic" ), axis.text.y.right = element_text( colour = "black", face = "bold" ) )
Plot different "climate stripes" or "warming stripes" using ggplot2. This graphics are visual representations of the change in temperature as measured in each location over the past 70-100+ years. Each stripe represents the temperature in that station averaged over a year.
ggstripes( data, plot_type = "stripes", plot_title = "", n_temp = 11, col_pal = "RdBu", ... )
ggstripes( data, plot_type = "stripes", plot_title = "", n_temp = 11, col_pal = "RdBu", ... )
data |
a data.frame with date( |
plot_type |
plot type (with labels, background, stripes with line
trend and animation). Accepted values are |
plot_title |
character string to be used for the graph title. |
n_temp |
Numeric value as the number of colors of the palette.
(default |
col_pal |
Character string indicating the name of the
|
... |
further arguments passed to |
A ggplot2 object
You need to set your API Key globally using aemet_api_key()
.
"Warming stripes" charts are a conceptual idea of Professor Ed Hawkins (University of Reading) and are specifically designed to be as simple as possible and alert about risks of climate change. For more details see ShowYourStripes.
climatestripes_station()
, ggplot2::theme()
for more possible
arguments to pass to ggstripes
.
Other aemet_plots:
climatestripes_station()
,
climatogram_normal()
,
climatogram_period()
,
ggclimat_walter_lieth()
,
ggwindrose()
,
windrose_days()
,
windrose_period()
Other stripes:
climaemet_9434_temp
,
climatestripes_station()
library(ggplot2) data <- climaemet::climaemet_9434_temp ggstripes(data, plot_title = "Zaragoza Airport") + labs(subtitle = "(1950-2020)") ggstripes(data, plot_title = "Zaragoza Airport", plot_type = "trend") + labs(subtitle = "(1950-2020)")
library(ggplot2) data <- climaemet::climaemet_9434_temp ggstripes(data, plot_title = "Zaragoza Airport") + labs(subtitle = "(1950-2020)") ggstripes(data, plot_title = "Zaragoza Airport", plot_type = "trend") + labs(subtitle = "(1950-2020)")
Plot a windrose showing the wind speed and direction using ggplot2.
ggwindrose( speed, direction, n_directions = 8, n_speeds = 5, speed_cuts = NA, col_pal = "GnBu", legend_title = "Wind speed (m/s)", calm_wind = 0, n_col = 1, facet = NULL, plot_title = "", ... )
ggwindrose( speed, direction, n_directions = 8, n_speeds = 5, speed_cuts = NA, col_pal = "GnBu", legend_title = "Wind speed (m/s)", calm_wind = 0, n_col = 1, facet = NULL, plot_title = "", ... )
speed |
Numeric vector of wind speeds. |
direction |
Numeric vector of wind directions. |
n_directions |
Numeric value as the number of direction bins to plot
(petals on the rose). The number of directions defaults to |
n_speeds |
Numeric value as the number of equally spaced wind speed
bins to plot. This is used if |
speed_cuts |
Numeric vector containing the cut points for the wind
speed intervals, or |
col_pal |
Character string indicating the name of the
|
legend_title |
Character string to be used for the legend title. |
calm_wind |
Numeric value as the upper limit for wind speed that is
considered calm (default |
n_col |
The number of columns of plots (default 1). |
facet |
Character or factor vector of the facets used to plot the various windroses. |
plot_title |
Character string to be used for the plot title. |
... |
further arguments (ignored). |
A ggplot2 object.
You need to set your API Key globally using aemet_api_key()
.
ggplot2::theme()
for more possible arguments to pass to
ggwindrose
.
Other aemet_plots:
climatestripes_station()
,
climatogram_normal()
,
climatogram_period()
,
ggclimat_walter_lieth()
,
ggstripes()
,
windrose_days()
,
windrose_period()
Other wind:
climaemet_9434_wind
,
windrose_days()
,
windrose_period()
library(ggplot2) speed <- climaemet::climaemet_9434_wind$velmedia direction <- climaemet::climaemet_9434_wind$dir rose <- ggwindrose( speed = speed, direction = direction, speed_cuts = seq(0, 16, 4), legend_title = "Wind speed (m/s)", calm_wind = 0, n_col = 1, plot_title = "Zaragoza Airport" ) rose + labs( subtitle = "2000-2020", caption = "Source: AEMET" )
library(ggplot2) speed <- climaemet::climaemet_9434_wind$velmedia direction <- climaemet::climaemet_9434_wind$dir rose <- ggwindrose( speed = speed, direction = direction, speed_cuts = seq(0, 16, 4), legend_title = "Wind speed (m/s)", calm_wind = 0, n_col = 1, plot_title = "Zaragoza Airport" ) rose + labs( subtitle = "2000-2020", caption = "Source: AEMET" )
Plot a windrose showing the wind speed and direction for a station over a days period.
windrose_days( station, start = "2000-12-01", end = "2000-12-31", n_directions = 8, n_speeds = 5, speed_cuts = NA, col_pal = "GnBu", calm_wind = 0, legend_title = "Wind Speed (m/s)", verbose = FALSE )
windrose_days( station, start = "2000-12-01", end = "2000-12-31", n_directions = 8, n_speeds = 5, speed_cuts = NA, col_pal = "GnBu", calm_wind = 0, legend_title = "Wind Speed (m/s)", verbose = FALSE )
station |
Character string with station identifier code(s)
(see |
start |
Character string as start date (format: |
end |
Character string as end date (format: |
n_directions |
Numeric value as the number of direction bins to plot
(petals on the rose). The number of directions defaults to |
n_speeds |
Numeric value as the number of equally spaced wind speed
bins to plot. This is used if |
speed_cuts |
Numeric vector containing the cut points for the wind
speed intervals, or |
col_pal |
Character string indicating the name of the
|
calm_wind |
Numeric value as the upper limit for wind speed that is
considered calm (default |
legend_title |
Character string to be used for the legend title. |
verbose |
Logical |
A ggplot2 object.
You need to set your API Key globally using aemet_api_key()
.
Other aemet_plots:
climatestripes_station()
,
climatogram_normal()
,
climatogram_period()
,
ggclimat_walter_lieth()
,
ggstripes()
,
ggwindrose()
,
windrose_period()
Other wind:
climaemet_9434_wind
,
ggwindrose()
,
windrose_period()
windrose_days("9434", start = "2000-12-01", end = "2000-12-31", speed_cuts = 4 )
windrose_days("9434", start = "2000-12-01", end = "2000-12-31", speed_cuts = 4 )
Plot a windrose showing the wind speed and direction for a station over a time period.
windrose_period( station, start = 2000, end = 2010, n_directions = 8, n_speeds = 5, speed_cuts = NA, col_pal = "GnBu", calm_wind = 0, legend_title = "Wind Speed (m/s)", verbose = FALSE )
windrose_period( station, start = 2000, end = 2010, n_directions = 8, n_speeds = 5, speed_cuts = NA, col_pal = "GnBu", calm_wind = 0, legend_title = "Wind Speed (m/s)", verbose = FALSE )
station |
Character string with station identifier code(s)
(see |
start |
Numeric value as start year (format: |
end |
Numeric value as end year (format: |
n_directions |
Numeric value as the number of direction bins to plot
(petals on the rose). The number of directions defaults to |
n_speeds |
Numeric value as the number of equally spaced wind speed
bins to plot. This is used if |
speed_cuts |
Numeric vector containing the cut points for the wind
speed intervals, or |
col_pal |
Character string indicating the name of the
|
calm_wind |
Numeric value as the upper limit for wind speed that is
considered calm (default |
legend_title |
Character string to be used for the legend title. |
verbose |
Logical |
A ggplot2 object
You need to set your API Key globally using aemet_api_key()
.
Other aemet_plots:
climatestripes_station()
,
climatogram_normal()
,
climatogram_period()
,
ggclimat_walter_lieth()
,
ggstripes()
,
ggwindrose()
,
windrose_days()
Other wind:
climaemet_9434_wind
,
ggwindrose()
,
windrose_days()
windrose_period("9434", start = 2000, end = 2010, speed_cuts = 4 )
windrose_period("9434", start = 2000, end = 2010, speed_cuts = 4 )