## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.width = 7,
fig.height = 6,
out.width = "100%"
)
# Interactive widgets embed their JavaScript libraries (several MB each), so
# they only run when pkgdown builds the website, not in the installed vignette.
widgets <- identical(Sys.getenv("IN_PKGDOWN"), "true")
## ----setup--------------------------------------------------------------------
library(geopt)
library(ggplot2)
## ----default------------------------------------------------------------------
m <- get_map()
## ----default-plot-------------------------------------------------------------
boundaries <- m[m$geopt_type == "boundary", ]
frames <- m[m$geopt_type == "frame", ]
ggplot() +
geom_sf(data = boundaries, aes(fill = nuts2)) +
geom_sf(data = frames, aes(linewidth = factor(geopt_frame_level)), fill = NA) +
scale_linewidth_manual(values = c(0.8, 0.4, 0.2)) +
guides(linewidth = "none") +
theme_void()
## ----levels-------------------------------------------------------------------
m_nuts2 <- get_map("nuts2")
boundaries <- m_nuts2[m_nuts2$geopt_type == "boundary", ]
frames <- m_nuts2[m_nuts2$geopt_type == "frame", ]
ggplot() +
geom_sf(data = boundaries, aes(fill = nuts2)) +
geom_sf(data = frames, aes(linewidth = factor(geopt_frame_level)), fill = NA) +
scale_linewidth_manual(values = c(0.8, 0.4, 0.2)) +
guides(linewidth = "none") +
theme_void()
## ----mainland-only------------------------------------------------------------
m <- get_map("nuts3", islands = "none")
ggplot(m) +
geom_sf(aes(fill = nuts3)) +
guides(fill = "none") +
theme_void()
## ----no-raa-------------------------------------------------------------------
m <- get_map("nuts2", islands = island_layout(raa = "none"))
ggplot(m[m$geopt_type == "boundary", ]) +
geom_sf(aes(fill = nuts2)) +
theme_void()
## ----layout-groups------------------------------------------------------------
m <- get_map("nuts3", islands = island_layout(raa = "groups", ram = "whole"))
boundaries <- m[m$geopt_type == "boundary", ]
frames <- m[m$geopt_type == "frame", ]
ggplot() +
geom_sf(data = boundaries, aes(fill = nuts2)) +
geom_sf(data = frames, fill = NA, linewidth = 0.5) +
guides(fill = "none") +
theme_void()
## ----no-frames----------------------------------------------------------------
m <- get_map("freguesia", islands = island_layout(frames = FALSE))
ggplot(m) +
geom_sf(aes(fill = nuts2), linewidth = 0.05) +
theme_void()
## ----island-box, warning = FALSE----------------------------------------------
m <- get_map("nuts3", islands = "box")
ggplot() +
geom_sf(data = m, aes(fill = area_ha), color = "white") +
geom_sf_text(
data = m[!is.na(m$geopt_label), ],
aes(label = geopt_label),
nudge_x = 0.3,
hjust = 0,
size = 4
) +
theme_void()
## ----box-position, warning = FALSE--------------------------------------------
m <- get_map("nuts3", islands = island_layout("box", box_position = c(-11.5, 38.5)))
ggplot() +
geom_sf(data = m, aes(fill = area_ha), color = "white") +
geom_sf_text(
data = m[!is.na(m$geopt_label), ],
aes(label = geopt_label),
nudge_x = 0.3,
hjust = 0,
size = 4
) +
theme_void()
## ----layout-print-------------------------------------------------------------
lay <- island_layout()
lay
## ----layout-edit--------------------------------------------------------------
lay$raa$anchor <- lay$raa$anchor + c(-0.5, 0)
lay$ram$groups$madeira$scale <- 2.5
lay$raa$label <- "Azores"
m <- get_map("nuts3", islands = lay)
frames <- m[m$geopt_type == "frame", ]
ggplot() +
geom_sf(data = m[m$geopt_type == "boundary", ], aes(fill = nuts2)) +
geom_sf(data = frames, fill = NA, linewidth = 0.4) +
guides(fill = "none") +
theme_void()
frames$geopt_label
## ----region-norte-------------------------------------------------------------
m <- get_map("municipio")
norte <- m[m$nuts2_cod %in% "PT11", ]
ggplot(norte) +
geom_sf(aes(fill = area_ha)) +
theme_void()
## ----region-acores, fig.height = 3.5------------------------------------------
m <- get_map("municipio", islands = "in_place")
acores <- m[m$nuts2_cod %in% "PT20", ]
ggplot(acores) +
geom_sf(aes(fill = municipio)) +
guides(fill = "none") +
theme_void()
## ----plot-pt------------------------------------------------------------------
df <- data.frame(
concelho = c("Porto", "Lisboa", "Braga", "Faro", "Lagoa (Açores)"),
score = c(10, 25, 15, 8, 12)
)
plot_pt(df, value = "score", by = c(municipio = "concelho"))
## ----plot-pt-both, eval = FALSE-----------------------------------------------
# m <- get_map("nuts3", islands = "box")
#
# plot_pt(m, value = "area_ha") # ggplot
# plot_pt(m, value = "area_ha", renderer = "echarts") # interactive widget
## ----plot-pt-style, eval = FALSE----------------------------------------------
# plot_pt(df, value = "score", by = c(municipio = "concelho")) +
# labs(title = "My indicator") +
# theme(legend.position = "bottom")
#
# plot_pt(m, value = "area_ha", renderer = "echarts") |>
# echarts4r::e_title("Area by NUTS3")
## ----ggplot2------------------------------------------------------------------
m <- get_map("municipio")
boundaries <- m[m$geopt_type == "boundary", ]
frames <- m[m$geopt_type == "frame", ]
ggplot() +
geom_sf(data = boundaries, aes(fill = nuts2)) +
geom_sf(data = frames, aes(linewidth = factor(geopt_frame_level)), fill = NA) +
scale_linewidth_manual(values = c(0.8, 0.4, 0.2)) +
guides(linewidth = "none") +
theme_void()
## ----tmap, eval = requireNamespace("tmap", quietly = TRUE)--------------------
library(tmap)
m <- get_map("nuts2")
boundaries <- m[m$geopt_type == "boundary", ]
frames <- m[m$geopt_type == "frame", ]
# Static mode
tmap_mode("plot")
tm_shape(boundaries) +
tm_polygons(fill = "nuts2") +
tm_shape(frames) +
tm_lines(
lwd = "geopt_frame_level",
lwd.scale = tm_scale_ordinal(values = c(0.8, 0.4, 0.2)),
lwd.legend = tm_legend_hide()
)
## ----echarts-inset, eval = widgets && requireNamespace("echarts4r", quietly = TRUE)----
# library(echarts4r)
#
# m <- get_map("municipio", islands = island_layout(raa = "groups", ram = "whole"))
# m$name <- ifelse(is.na(m$municipio), m$geopt_label, m$municipio)
# geojson <- geojsonsf::sf_geojson(m)
#
# m |>
# e_charts(name) |>
# e_map_register("pt", geojson) |>
# e_map(area_ha, map = "pt", roam = TRUE, data = frame_data_echarts(m, "area_ha")) |>
# e_visual_map(area_ha) |>
# e_tooltip()
## ----echarts-box, eval = widgets && requireNamespace("echarts4r", quietly = TRUE)----
# m <- get_map("nuts3", islands = "box")
# m$name <- ifelse(is.na(m$geopt_label), m$nuts3, m$geopt_label)
# geojson <- geojsonsf::sf_geojson(m)
#
# m |>
# e_charts(name) |>
# e_map_register("pt", geojson) |>
# e_map(area_ha, map = "pt", roam = TRUE) |>
# box_labels_echarts(m) |>
# e_visual_map(area_ha) |>
# e_tooltip()
## ----plotly-sf, eval = widgets && requireNamespace("plotly", quietly = TRUE), warning = FALSE, message = FALSE----
# library(plotly)
#
# m <- get_map("nuts3", islands = island_layout(frames = FALSE))
# boundaries <- sf::st_cast(m, "MULTIPOLYGON")
#
# plot_ly(
# boundaries,
# split = ~nuts3,
# color = ~nuts3,
# text = ~paste0(nuts3, "
Area: ", round(area_ha), " ha"),
# hoverinfo = "text",
# hoveron = "fills"
# ) |>
# add_sf(showlegend = FALSE)
## ----plotly-ggplotly, eval = widgets && requireNamespace("plotly", quietly = TRUE) && packageVersion("plotly") >= "4.12.0", warning = FALSE----
# p <- ggplot(boundaries) +
# geom_sf(
# aes(
# fill = nuts3,
# text = paste0(nuts3, "
Area: ", round(area_ha), " ha")
# )
# ) +
# guides(fill = "none") +
# theme_void()
#
# plotly::ggplotly(p, tooltip = "text", showlegend = FALSE)