La región tropical y subtropical del planeta se caracteriza por su clima cálido y una biodiversidad excepcional. La zona tropical se extiende aproximadamente entre los 23.5° N y 23.5° S de latitud, donde se encuentran las condiciones climáticas más cálidas, con temperaturas medias anuales superiores a los 18 °C. Esta región incluye biomas como las selvas tropicales, sabanas y zonas costeras, que albergan una variedad impresionante de flora y fauna.
Por otro lado, la región subtropical, que se ubica entre los trópicos y los 40° N y S, presenta un clima más variable, con inviernos frescos y veranos cálidos. Esta zona incluye ecosistemas como los desiertos, bosques mediterráneos y praderas.
Lo primero que necesitamos es instalar las paqueterías con las que trabajaremos (en caso de que no las tengas): install.packages(“ggplot2”), install.packages(“maps”)
Ahora solo es cargar las paqueterías
library(ggplot2)
library(maps)
con la función “map_data” vamos a obtener la base de datos de la región que nos interesa, en este caso lo haremos del mundo entero.
# Obtener datos de los mapas de países
world <- map_data("world")
Si vemos el objeto que recien creamos veremos de cuales columnas estpa conformado:
# Ver las primeras líneas de la base de datos
head(world)
## long lat group order region subregion
## 1 -69.89912 12.45200 1 1 Aruba <NA>
## 2 -69.89571 12.42300 1 2 Aruba <NA>
## 3 -69.94219 12.43853 1 3 Aruba <NA>
## 4 -70.00415 12.50049 1 4 Aruba <NA>
## 5 -70.06612 12.54697 1 5 Aruba <NA>
## 6 -70.05088 12.59707 1 6 Aruba <NA>
Los datos más importantes serán “long” y “lat” a partir de los cuales se alimenta el mapa
Como ya generamos el objeto “world” ya podemos hacer una prueba a ver como se ve:
ggplot() +
geom_polygon(data = world, aes(x = long, y = lat, group = group),
fill = "white", color = "black")
Si se fijan con estas simples líneas ya tenemos un mapa base, sin embargo le hace falta mucho diseño y aún no muestra nuestro objetivo final, el cual es que nos muestre la región tropical y subtropical del planeta.
Ahora vamos a crear un objeto para delimitar la latitud norte y sur de la zona tropical, tu pueden enfocarte a otros límites que te interesen pero para fines de este ejercicio usaremos -23.43691 y 23.43691 que es donde se encuentran los trópicos de cancer y capricornio.
Ahora utilizaremos la función “geom_rect” para generar un rectángulo que rellene la zona tropical
# Mapa base del mundo
ggplot() +
geom_polygon(data = world, aes(x = long, y = lat, group = group),
fill = "white", color = "black") +
geom_rect(aes(xmin = -180, #Límite izquierdo del rectángulo
xmax = 180, #Límite derecho del rectángulo
ymin = -23.43691, #Límite superior del rectángulo
ymax = 23.43691), #Límite inferior del rectángulo
fill = "blue", #Color del relleno
alpha = 0.2) #Transparencia
En este caso dejaremos los límites x en -180 y 180 porque queremos que cubran todo el mundo de orilla a orilla
Si en vez de una área sombreada queremos agregar unas líneas horizontales para delimitar la zona tropical podemos utilizar la función “geom_hline”.
ggplot() +
geom_polygon(data = world, aes(x = long, y = lat, group = group),
fill = "white", color = "black") +
geom_hline(yintercept = -23.43691, linetype= "dashed")+ #Límite superior de la zona tropical
geom_hline(yintercept = 23.43691, linetype= "dashed") #Límite inferior de la zona tropical
Puedes cambiar el tipo de línea cambiando la función “linetype” y agregar “solid”, “dashed”, “dotted”, “dotdash”, “longdash”, “twodash”, “1F”, “F1”, “4C88C488”, “12345678” etc. dependiendo el tipo de línea.
Ahora agregaremos la zona subtropical siguiendo los mismos pasos de antes. Solo que ahora serán dos rectángulos los que necesitamos agregar, uno al norte y otro al sur. Para este ejemplo definimos que la zona subtropical va de los trópicos 23.43691 hasta la latitud 40
# Crear el gráfico
ggplot() +
# Mapa base del mundo
geom_polygon(data = world, aes(x = long, y = lat, group = group),
fill = "white", color = "black") +
# Región tropical (sombreada en verde)
geom_rect(aes(xmin = -180, xmax = 180, ymin = -23.43691, ymax = 23.43691),
fill = "green", alpha = 0.2) +
# Regiones subtropicales (sombreada en amarillo)
geom_rect(aes(xmin = -180, xmax = 180, ymin = -40, ymax = -23.43691),
fill = "yellow", alpha = 0.2) +
geom_rect(aes(xmin = -180, xmax = 180, ymin = 40, ymax = 23.43691),
fill = "yellow", alpha = 0.2)
Al igual que ántes podemos jugar con los colores para obtener el resultado deseado
ggplot() +
# Mapa base del mundo
geom_polygon(data = world, aes(x = long, y = lat, group = group),
fill = "white", color = "black") +
# Región tropical
geom_rect(aes(xmin = -180, xmax = 180, ymin = -23.43691, ymax = 23.43691),
fill = "red", alpha = 0.2) +
# Regiones subtropicales
geom_rect(aes(xmin = -180, xmax = 180, ymin = -40, ymax = -23.43691),
fill = "orange", alpha = 0.2) +
geom_rect(aes(xmin = -180, xmax = 180, ymin = 40, ymax = 23.43691),
fill = "orange", alpha = 0.2)+
geom_hline(yintercept = -23.43691, linetype= "dashed")+
geom_hline(yintercept = 23.43691, linetype= "dashed")+
geom_hline(yintercept = -40, linetype= "dashed")+
geom_hline(yintercept = 40, linetype= "dashed")
Ya tenemos lo más básico ahora necesitamos trabajar el diseño.
Existen algunos temas que podemos probar para un diseño rápido.
Con la función: theme_bw()
ggplot() +
geom_polygon(data = world, aes(x = long, y = lat, group = group),
fill = "white", color = "black") +
geom_rect(aes(xmin = -180, xmax = 180, ymin = -23.43691, ymax = 23.43691),
fill = "red", alpha = 0.2) +
geom_rect(aes(xmin = -180, xmax = 180, ymin = -40, ymax = -23.43691),
fill = "orange", alpha = 0.2) +
geom_rect(aes(xmin = -180, xmax = 180, ymin = 40, ymax = 23.43691),
fill = "orange", alpha = 0.2)+
theme_bw()
Con la función: theme_linedraw()
ggplot() +
geom_polygon(data = world, aes(x = long, y = lat, group = group),
fill = "white", color = "black") +
geom_rect(aes(xmin = -180, xmax = 180, ymin = -23.43691, ymax = 23.43691),
fill = "red", alpha = 0.2) +
geom_rect(aes(xmin = -180, xmax = 180, ymin = -40, ymax = -23.43691),
fill = "orange", alpha = 0.2) +
geom_rect(aes(xmin = -180, xmax = 180, ymin = 40, ymax = 23.43691),
fill = "orange", alpha = 0.2)+
theme_linedraw()
Con la función: theme_light()
ggplot() +
geom_polygon(data = world, aes(x = long, y = lat, group = group),
fill = "white", color = "black") +
geom_rect(aes(xmin = -180, xmax = 180, ymin = -23.43691, ymax = 23.43691),
fill = "red", alpha = 0.2) +
geom_rect(aes(xmin = -180, xmax = 180, ymin = -40, ymax = -23.43691),
fill = "orange", alpha = 0.2) +
geom_rect(aes(xmin = -180, xmax = 180, ymin = 40, ymax = 23.43691),
fill = "orange", alpha = 0.2) +
theme_light()
Con la función: theme_dark()
ggplot() +
geom_polygon(data = world, aes(x = long, y = lat, group = group),
fill = "white", color = "black") +
geom_rect(aes(xmin = -180, xmax = 180, ymin = -23.43691, ymax = 23.43691),
fill = "red", alpha = 0.2) +
geom_rect(aes(xmin = -180, xmax = 180, ymin = -40, ymax = -23.43691),
fill = "orange", alpha = 0.2) +
geom_rect(aes(xmin = -180, xmax = 180, ymin = 40, ymax = 23.43691),
fill = "orange", alpha = 0.2) +
theme_dark()
Con la función: theme_minimal()
ggplot() +
geom_polygon(data = world, aes(x = long, y = lat, group = group),
fill = "white", color = "black") +
geom_rect(aes(xmin = -180, xmax = 180, ymin = -23.43691, ymax = 23.43691),
fill = "red", alpha = 0.2) +
geom_rect(aes(xmin = -180, xmax = 180, ymin = -40, ymax = -23.43691),
fill = "orange", alpha = 0.2) +
geom_rect(aes(xmin = -180, xmax = 180, ymin = 40, ymax = 23.43691),
fill = "orange", alpha = 0.2) +
theme_minimal()
Con la función: theme_classic()
ggplot() +
geom_polygon(data = world, aes(x = long, y = lat, group = group),
fill = "white", color = "black") +
geom_rect(aes(xmin = -180, xmax = 180, ymin = -23.43691, ymax = 23.43691),
fill = "red", alpha = 0.2) +
geom_rect(aes(xmin = -180, xmax = 180, ymin = -40, ymax = -23.43691),
fill = "orange", alpha = 0.2) +
geom_rect(aes(xmin = -180, xmax = 180, ymin = 40, ymax = 23.43691),
fill = "orange", alpha = 0.2)+
theme_classic()
Con la función: theme_void()
ggplot() +
geom_polygon(data = world, aes(x = long, y = lat, group = group),
fill = "white", color = "black") +
geom_rect(aes(xmin = -180, xmax = 180, ymin = -23.43691, ymax = 23.43691),
fill = "red", alpha = 0.2) +
geom_rect(aes(xmin = -180, xmax = 180, ymin = -40, ymax = -23.43691),
fill = "orange", alpha = 0.2) +
geom_rect(aes(xmin = -180, xmax = 180, ymin = 40, ymax = 23.43691),
fill = "orange", alpha = 0.2) +
theme_void()
Para fines de este ejemplo utilizaremos “theme_void()”
# Cargar paquetes
# Cargar paquetes
library(ggplot2)
library(maps)
# Obtener datos de los mapas de países
world <- map_data("world")
# Definir latitudes para las regiones tropicales y subtropicales
tropic_lat <- c(-23.43691, 23.43691)
subtropic_lat <- c(-40, 40)
# Crear el gráfico con fondo transparente y sin márgenes
ggplot() +
# Mapa base del mundo
geom_polygon(data = world, aes(x = long, y = lat, group = group),
fill = "#d9d9d9", color = "#bdbdbd", size = 0.3) + # Bordes claros
# Región tropical (verde suave)
geom_rect(aes(xmin = -180, xmax = 180, ymin = tropic_lat[1], ymax = tropic_lat[2], fill = "Tropical"),
alpha = 0.6) + # Verde suave con mayor transparencia
# Regiones subtropicales (azul suave)
geom_rect(aes(xmin = -180, xmax = 180, ymin = subtropic_lat[1], ymax = tropic_lat[1], fill = "Subtropical"),
alpha = 0.4) + # Azul suave
geom_rect(aes(xmin = -180, xmax = 180, ymin = tropic_lat[2], ymax = subtropic_lat[2], fill = "Subtropical"),
alpha = 0.4) + # Azul suave
# Tema sin fondo y sin márgenes
theme_void() +
# Personalizar títulos
labs(title = "Ejemplo de mapa en R",
subtitle = "Región Tropical y Subtropical",
fill = "Región", # Etiqueta de la leyenda
caption = "") +
# Escalas y proporciones, incluyendo la Antártida
scale_x_continuous(breaks = seq(-180, 180, by = 60), limits = c(-180, 180)) +
scale_y_continuous(breaks = seq(-90, 90, by = 30), limits = c(-90, 90)) +
# Mantener proporciones geográficas correctas
#Esta función se utiliza para fijar la relación de aspecto del gráfico
coord_fixed(ratio = 1) +
# Personalizar la escala de colores de la leyenda
scale_fill_manual(values = c("Tropical" = "#a1d99b", "Subtropical" = "#9ecae1"))+
#Agregar el ecuador
geom_hline(yintercept = 0, linetype= "dashed", colour = "black" )
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
Si en vez del mundo quieres trabajar con otra región del mundo solo debes especificarlo al inicio y cambiar los márgenes o límites del mapa. Por ejemplo realicemos un ejemplo para el continente americano
# Obtener los datos de los mapas de los países
world <- map_data("world")
# Filtrar solo los las coordenadas de los países del continente americano
americas <- subset(world, long >= -180 & long <= -30 & lat >= -60 & lat <= 90)
# Definir las latitudes para las regiones tropicales y subtropicales
tropic_lat <- c(-23.43691, 23.43691)
subtropic_lat <- c(-40, 40)
# Crear el gráfico del continente americano con sombreado de zonas tropicales y subtropicales
ggplot() +
# Mapa base de América (incluyendo Alaska y sin cortes)
geom_polygon(data = americas, aes(x = long, y = lat, group = group),
fill = "#d9d9d9", color = "#bdbdbd", size = 0.3) + # Bordes claros
# Región tropical (verde suave)
geom_rect(aes(xmin = -180, xmax = -30, ymin = tropic_lat[1], ymax = tropic_lat[2], fill = "Tropical"),
alpha = 0.6) + # Verde suave con mayor transparencia
# Regiones subtropicales (azul suave)
geom_rect(aes(xmin = -180, xmax = -30, ymin = subtropic_lat[1], ymax = tropic_lat[1], fill = "Subtropical"),
alpha = 0.4) + # Azul suave en la parte sur
geom_rect(aes(xmin = -180, xmax = -30, ymin = tropic_lat[2], ymax = subtropic_lat[2], fill = "Subtropical"),
alpha = 0.4) + # Azul suave en la parte norte
# Tema sin fondo y sin márgenes
theme_void() +
# Personalizar títulos
labs(title = "Ejemplo de mapa en R",
subtitle = "Región Tropical y Subtropical",
fill = "Región", # Etiqueta de la leyenda
caption = "") +
# Ajustes de texto
theme(
plot.title = element_text(size = 20, face = "bold", hjust = 0.5, family = "sans", color = "#4d4d4d"),
plot.subtitle = element_text(size = 14, hjust = 0.5, family = "sans", color = "#6d6d6d"),
plot.caption = element_text(size = 10, hjust = 0.5, family = "sans", color = "#808080"),
plot.background = element_rect(fill = NA, color = NA), # Fondo transparente
panel.background = element_rect(fill = NA, color = NA), # Fondo del panel transparente
panel.border = element_blank(), # Sin bordes en el panel
plot.margin = margin(0, 0, 0, 0), # Sin márgenes
axis.text = element_blank(), # Sin texto en los ejes
axis.title = element_blank() # Sin títulos en los ejes
) +
# Escalas y proporciones para América, incluyendo Alaska
scale_x_continuous(breaks = seq(-180, -30, by = 30), limits = c(-180, -30)) +
scale_y_continuous(breaks = seq(-60, 90, by = 30), limits = c(-60, 90)) +
# Agregar el ecuador
geom_hline(yintercept = 0, linetype = "dashed", colour = "black") +
# Mantener proporciones geográficas correctas
coord_fixed(ratio = 1) +
# Personalizar la escala de colores de la leyenda
scale_fill_manual(values = c("Tropical" = "#a1d99b", "Subtropical" = "#9ecae1"))
La ventaja de R es que tiene un universo casi infinito de diferentes posibilidades que puedes usar para crear mapas increíbles e incluso interactivos. Aquí te dejamos un ejemplo para que motives tu creatividad.
# Cargar los paquetes necesarios
library(leaflet)
library(sf)
## Linking to GEOS 3.11.2, GDAL 3.8.2, PROJ 9.3.1; sf_use_s2() is TRUE
library(rnaturalearth)
library(rnaturalearthdata)
##
## Attaching package: 'rnaturalearthdata'
## The following object is masked from 'package:rnaturalearth':
##
## countries110
library(leaflet.extras) # Cargar el paquete para componentes extras
# Cargar los datos del mapa mundial y convertir a formato sf (simple features)
world <- ne_countries(scale = "medium", returnclass = "sf")
# Crear las regiones tropicales y subtropicales como objetos sf (rectángulos)
tropic_region <- st_as_sfc(st_bbox(c(xmin = -360, xmax = 360, ymin = -23.43691, ymax = 23.43691))) # Toda la región tropical
subtropic_region_north <- st_as_sfc(st_bbox(c(xmin = -360, xmax = 360, ymin = 23.43691, ymax = 40))) # Región subtropical norte
subtropic_region_south <- st_as_sfc(st_bbox(c(xmin = -360, xmax = 360, ymin = -40, ymax = -23.43691))) # Región subtropical sur
# Crear un mapa interactivo con leaflet
leaflet() %>%
# Añadir los límites de los países del mundo
addPolygons(data = world, color = "#444444", weight = 1, fillColor = "#f0f0f0", fillOpacity = 0.5, group = "Límites de países") %>%
# Sombrear la región tropical (verde)
addPolygons(data = tropic_region, fillColor = "#66c2a5", fillOpacity = 0.3, weight = 0, group = "Región Tropical") %>%
# Sombrear la región subtropical al norte (azul claro)
addPolygons(data = subtropic_region_north, fillColor = "#8da0cb", fillOpacity = 0.3, weight = 0, group = "Región Subtropical Norte") %>%
# Sombrear la región subtropical al sur (azul claro)
addPolygons(data = subtropic_region_south, fillColor = "#8da0cb", fillOpacity = 0.3, weight = 0, group = "Región Subtropical Sur") %>%
# Añadir un relieve de terreno (capa base de Esri)
addProviderTiles(providers$Esri.WorldImagery, group = "Mapa de Terreno") %>%
# Añadir capas de control para permitir que el usuario seleccione qué mostrar
addLayersControl(
baseGroups = c("Mapa de Terreno"),
overlayGroups = c("Límites de países", "Región Tropical", "Región Subtropical Norte", "Región Subtropical Sur"),
options = layersControlOptions(collapsed = FALSE)
) %>%
# Añadir escala
addScaleBar(position = "bottomleft", options = scaleBarOptions(maxWidth = 200, metric = TRUE)) %>%
# Añadir una vista inicial centrada en el mundo
setView(lng = 0, lat = 0, zoom = 2) %>%
# Añadir mini mapa
addMiniMap(toggleDisplay = TRUE, position = "bottomright") %>%
# Añadir etiquetas y zoom
addTiles() # Fondo interactivo por defecto