2010-11-18 18 views
12

En caso de que alguien no sepa: A cartogram es un tipo de mapa donde alguna propiedad numérica dependiente del país/región escala las respectivas regiones para que la densidad de esa propiedad sea (cercana a) constante. Un ejemplo es¿Cartogramas de dibujo con Matplotlib?

Example cartogram

de worldmapper.org. En este ejemplo, los países se escalan según su población, lo que da como resultado una densidad de población casi constante.

Huelga decir que esto es realmente genial. ¿Alguien sabe de una biblioteca basada en Matplotlib para dibujar tales mapas? El método utilizado en worldmapper.org se describe en (1), por lo que me sorprendería que nadie lo haya implementado aún ...

También me interesa saber sobre otras bibliotecas de cartogramas, incluso si son no hecho para Matplotlib.

(1) Michael T. Gastner y M. E. J. Newman, Método basado en difusión para producir mapas de ecualización de densidad, Proc. Nat. Acad. Sci. USA, 101, 7499 - 7504 (2004). Disponible en arXiv.

+0

Hay un buen ejemplo animado [aquí] (http://metrocosm.com/the-housing-value-of-every-county-in-the-us/), con algunos (pero tal vez no todos) detalles sobre cómo se hizo. – naught101

Respuesta

4

Hay this, aunque se basa en un algoritmo diferente (y aunque está en el sitio de ESRI, no requiere ArcGIS). Por supuesto, una vez que tenga el cartograma puede trazarlo en matplotlib.

+0

Brillante, gracias! Creo que me estaba confundiendo cuando dije "con Matplotlib". Supongo que estaba pensando en lo que la gente de Matplotlib llama un conjunto de herramientas, como el conjunto de herramientas Mapa, pero no hay absolutamente ninguna razón por la que realmente quiera eso. Tu solución será suficiente :-) – gspr

0

Here es un complemento de Javascript para realizar cartogramas con D3. Es una solución buena y simple si no está demasiado preocupado por las regiones con el tamaño correcto. Si la precisión es importante, hay otras opciones disponibles que le dan más libertad para jugar con los parámetros del algoritmo para obtener un resultado más preciso.

Éstos son dos grandes programas independientes que conozco:

Scapetoad es muy fácil de usar. Solo déle un shapefile, dígale qué atributo usar para escalar, y establezca algunos parámetros de precisión. Si hay alguna duda, this post describe el proceso.

Carto3F es más complejo y permite una mayor precisión, aunque es un poco más complicado de imaginar: muchos ajustes de parámetros sin mucha documentación que los explique.

También hay un QGIS cartogram plugin, escrito en Python. Aunque no he podido hacer que funcione, tampoco puedo comentar sobre eso.

0

En resumen, no. Pero Newman tiene una excelente implementación pequeña de su método y el de Gastner on his website. Instalarlo es fácil y funciona desde la línea de comando. Aquí hay un ejemplo de un flujo de trabajo que usa este software que funcionó para mí.

  1. Calcule una grilla de las estimaciones de densidad en algunas regiones, p. en Python. Almacénelo como una matriz de números.
  2. Ejecute el programa cart con su matriz de densidad como entrada desde la línea de comando o desde un subproceso en Python.
  3. El programa devuelve una lista de nuevas coordenadas para cada punto de la cuadrícula.
  4. Transfiera sus puntos de archivos de forma a través del programa interp y en un nuevo archivo shape para obtener el mapa transformado.

Hay buenas instrucciones en la página principal.