Cómo insertar una barra de escala en un mapa en matplotlib

¿Alguna idea sobre cómo puedo insertar una barra de escala en un mapa en matplotlib que muestra la escala de longitud? algo como el que he adjuntado.

¿O quizás alguna idea sobre cómo medir y mostrar distancias automáticamente (no dibujar una flecha y escribir la distancia manualmente)?

Gracias 🙂 introduzca la descripción de la imagen aquí

Hay una clase ya existente para barras de escala en matplotlib llamada AnchoredSizeBar . En el ejemplo siguiente, AnchoredSizeBar se usa para agregar una barra de escala a una imagen (o un mapa sobre un área de aleatoriedad de 100×100 metros)

import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.axes_grid1.anchored_artists import AnchoredSizeBar import matplotlib.font_manager as fm fontprops = fm.FontProperties(size=18) fig, ax = plt.subplots() ax.imshow(np.random.random((10,10)),extent=[0,100,0,100]) 

La extensión define las imágenes max y min de los valores horizontales y verticales.

 scalebar = AnchoredSizeBar(ax.transData, 20, '20 m', 'lower center', pad=0.1, color='white', frameon=False, size_vertical=1, fontproperties=fontprops) ax.add_artist(scalebar) 

Los cuatro primeros argumentos de AnchoredSizeBar son el objeto de transformación del sistema de coordenadas, la longitud de la barra de escala, la etiqueta y la ubicación. Otros argumentos opcionales cambian el diseño. Estos se explican bien en la documentación.

 ax.set_yticks([]) ax.set_xticks([]) 

Esto le da a Scalebar en una imagen / un mapa sobre un área de 100×100 metros de forma aleatoria

Me gustaría probar el paquete matplotlib-scalebar . (Para algo como tu ejemplo c.)

Suponiendo que está trazando una imagen del mapa con imshow o similar, y conoce el ancho de píxel / tamaño de celda (el tamaño equivalente en el mundo real de un píxel en la imagen del mapa), puede crear automáticamente la barra de escala:

Este ejemplo es sacado de la página del paquete PyPi matplotlib-scalebar pero aquí está para completar:

 import matplotlib.pyplot as plt import matplotlib.cbook as cbook from matplotlib_scalebar.scalebar import ScaleBar plt.figure() image = plt.imread(cbook.get_sample_data('grace_hopper.png')) plt.imshow(image) scalebar = ScaleBar(0.2) # 1 pixel = 0.2 meter plt.gca().add_artist(scalebar) plt.show() 

introduzca la descripción de la imagen aquí