Muy buenas, soy Miguel y esta vez les traigo un nuevo post.
Índice
Una biblioteca de Python para hacer mapas estáticos de alta calidad
Con la era de los macrodatos llega la era de los grandes datos geoespaciales. Los investigadores tienen cada vez más acceso a información geográfica que puede hacer cualquier cosa, desde rastrear los patrones de migración de especies en peligro de extinción hasta mapear cada tienda de donas en el paÃs.
Para ayudar a visualizar esta información, la biblioteca de Python Cartopy Puede crear mapas profesionales y publicables con solo unas pocas lÃneas de código. Construido con Matplotlib
en mente, su sintaxis es familiar y fácil de entender.
Mapas simples
Para empezar, crearemos el mapa mundial más simple posible. Antes de escribir cualquier código pesado, se deben instalar las bibliotecas Cartopy
y Matplotlib
en Python
.
import cartopy.crs as crs import cartopy.feature as cfeature import matplotlib.pyplot as plt
Arriba, las bibliotecas de requisitos previos están importadas y listas para usar.
# Initialize the figure figure = plt.figure(figsize=(8,6)) # use the Mercator projection ax = figure.add_subplot(1,1,1, projection=crs.Mercator(()) # Add feature to the map ax.stock_img() plt.show()
Las siguientes lÃneas de código pasan por el proceso básico de creación de un mapa:
- Inicialice el mapa y especifique el tamaño de la figura con el argumento figsize.
- Agregue una subtrama que especifique la proyección utilizada.
- Agregar caracterÃsticas a la subtrama.
Con solo unas pocas lÃneas de códigos, se crea lo mÃnimo para un mapa. Desafortunadamente, este mapa es bastante sencillo, por lo que le agregaremos algunas caracterÃsticas adicionales.
figure = plt.figure(figsize=(8,6)) ax = figure.add_subplot(1,1,1, projection=crs.Mercator()) # adds a stock image as a background ax.stock_img() # adds national borders ax.add_feature(cfeature.BORDERS) # add coastlines ax.add_feature(cfeature.COASTLINE) plt.show()
Al modificar la variable ax
, se agrega más información al mapa. En este caso, se trazan las fronteras nacionales y las costas.
Las caracterÃsticas adicionales, como el mapa de los principales rÃos y lagos, también se incluirán con el mismo método. Se puede encontrar una lista completa de caracterÃsticas aquÃ.
Diferentes proyecciones
Los mapas anteriores utilizan la famosa proyección de Mercator
. Si bien es perfectamente suficiente en la mayorÃa de los casos, el mapa de Mercator
distorsiona el tamaño de las tierras porque extiende una esfera a un cuadrado. Afortunadamente, Cartopy
admite otras proyecciones.
figure = plt.figure(figsize=(8,6)) # set the projection to Mollweide ax = figure.add_subplot(1,1,1, projection=crs.Mollweide()) ax.stock_img() plt.show()
Al cambiar el argumento de proyección de crs.Mercator ()
a crs.Molleweide ()
, se crea una proyección diferente, más elÃptica (y precisa).
figure = plt.figure(figsize=(8,6)) # Set the projection to Interrupted Goode Homolosine ax = figure.add_subplot(1,1,1, projection=crs.InterruptedGoodeHomolosine()) ax.stock_img() plt.show()
Se puede producir una proyección aún más precisa usando InterruptedGoodeHomolosine ()
en el argumento de proyección.
Estas no son de ninguna manera las únicas proyecciones que Cartopy
puede mapear. Se puede encontrar una lista completa aquÃ.
Acercar y alejar las regiones
Si bien los mapas del mundo son útiles en muchos contextos, a menudo los datos deben representarse en un área local, como un continente o un paÃs.
figure = plt.figure(figsize=(8,6)) ax = figure.add_subplot(1,1,1, projection=crs.Mercator()) ax.add_feature(cfeature.COASTLINE) ax.add_feature(cfeature.STATES) # Zoom in on the US by setting longitude/latitude parameters ax.set_extent( [ -135, # minimum latitude -60, # min longitude 20, # max latitude 55 # max longitude ], crs=crs.PlateCarree() ) plt.show()
Una vez que se inicializa el mapa y se agregan las caracterÃsticas habituales, la variable ax se modifica adicionalmente con el método set_extent ()
, que especifica los rangos de longitud y latitud para establecer el enfoque en el mapa.
Tenga en cuenta el argumento crs
, que especifica qué sistema de coordenadas utilizar. La convención general es utilizar las coordenadas de la proyección de Plate Carrée incluso si no está de acuerdo con la proyección del mapa, porque produce resultados más predecibles.
Mapas de dispersión
Hasta ahora, solo hemos hablado de producir mapas genéricos, pero ahora discutiremos cómo trazar datos en esos mapas. El único requisito es que cada observación tenga una latitud y longitud válidas.
Para demostrarlo, se tomó un archivo fuente de 341 aeropuertos de EE. UU. De Kaggle y se representará en un mapa de dispersión.
import pandas as pd # Read the data df = pd.read_csv("airports.csv")
Antes de realizar cualquier mapeo, la biblioteca Pandas se importa para estructurar los datos y el archivo CSV se lee en un DataFrame
.
figure = plt.figure(figsize=(8,6)) ax = figure.add_subplot(1,1,1, projection=crs.PlateCarree()) ax.add_feature(cfeature.COASTLINE) ax.add_feature(cfeature.STATES) ax.set_extent( [-135, -60, 20, 55], crs=crs.PlateCarree() ) # modify the plot by adding a scatterplot over the map plt.scatter( x=df["LONGITUDE"], y=df["LATITUDE"], color="red", s=4, alpha=1, transform=crs.PlateCarree() ) plt.show()
Esencialmente, después de crear un mapa, Matplotlib
agrega un diagrama de dispersión en la parte superior de la imagen. Para aquellos familiarizados con la popular biblioteca de gráficos, la sintaxis deberÃa resultar muy familiar.
Para aquellos que no lo están, el desglose de los argumentos es:
x
: los datos en el ejex
. En este caso, la longitud.y
: los datos en el ejey
. En este caso, latitud.color
: el color de los marcadores.s
: el tamaño de los marcadores.alpha
: la transparencia de los marcadores, de0
a1
.
Se pueden pasar argumentos adicionales en el diagrama de dispersión para personalizarlo aún más. Puede encontrar una lista completa aquÃ.
También tenga en cuenta el argumento de transformación, que, por convención, usa la proyección Plate Carrée por una razón similar a set_extent ()
.
Conclusiones
Cartopy es una biblioteca de mapas diversa. Al permitir varias proyecciones y sistemas de coordenadas, admite una amplia gama de posibles casos de uso, desde el seguimiento ecológico hasta la inteligencia empresarial.
Su integración con Matplotlib
, sin embargo, se destaca como una increÃble herramienta de análisis de datos.
Si bien solo se demostró un mapa de dispersión simple, su uso amplio y flexible de Matplotlib
significa que se puede proyectar un número diverso de diagramas y gráficos en un mapa.
Espero que te haya servido. Gracias por leer.
Añadir comentario