2010-11-18 45 views
12

Falls jemand es nicht weiß: Ein cartogram ist ein Kartentyp, bei dem einige länder-/regionsabhängige numerische Eigenschaften die entsprechenden Regionen skalieren, so dass die Dichte dieser Eigenschaft (fast) konstant ist. Ein Beispiel dafür istZeichnen von Kartogrammen mit Matplotlib?

Example cartogram

von worldmapper.org. In diesem Beispiel werden die Länder entsprechend ihrer Bevölkerungszahl skaliert, was zu einer nahezu konstanten Bevölkerungsdichte führt.

Unnötig zu sagen, das ist wirklich cool. Kennt jemand eine Matplotlib-basierte Bibliothek zum Zeichnen solcher Karten? Die Methode, die auf worldmapper.org verwendet wird, ist in (1) beschrieben, so würde es mich überraschen, wenn niemand dies bereits implementiert hat ...

Ich bin auch daran interessiert, von anderen Kartogramm-Bibliotheken zu hören, auch wenn sie es sind nicht für Matplotlib gemacht.

(1) Michael T. Gastner und M. E. J. Newman, Diffusionsgestütztes Verfahren zur Herstellung von Dichteausgleichskarten, Proc. Nat. Acad. Sci. USA, 101, 7499-7504 (2004). Verfügbar unter arXiv.

+0

Es gibt ein schönes animiertes Beispiel [hier] (http://metrocosm.com/the-housing-value-of-every-county-in-the-us/), mit einigen (aber vielleicht nicht alle) Details darüber, wie es gemacht wurde. – naught101

Antwort

4

Es gibt this, obwohl es basiert und ein anderer Algorithmus (und obwohl es auf der ESRI-Site ist, erfordert es ArcGIS nicht). Sobald Sie das Kartogramm haben, können Sie es natürlich in Matplotlib plotten.

+0

Brilliant, danke! Ich glaube, ich habe mich selbst verwirrt, als ich "mit Matplotlib" gesagt habe. Ich denke, ich habe darüber nachgedacht, was die Matplotlib-Leute ein Toolkit nennen, wie das Map-Toolkit, aber es gibt absolut keinen Grund, warum ich das wirklich will. Ihre Lösung wird sicherlich ausreichen :-) – gspr

0

Here ist ein Javascript-Plugin, um Kartogramme mit D3 zu erstellen. Es ist eine gute, einfache Lösung, wenn Sie sich keine Sorgen machen, dass die Regionen genau bemessen sind. Wenn die Genauigkeit wichtig ist, stehen Ihnen weitere Optionen zur Verfügung, die Ihnen mehr Freiheit beim Spielen mit den Algorithmusparametern geben, um ein genaueres Ergebnis zu erzielen.

Hier sind zwei große Standalone-Programme, die ich kenne:

Scapetoad ist sehr einfach zu bedienen. Geben Sie ihm einfach ein Shapefile, sagen Sie ihm, welches Attribut für die Skalierung verwendet werden soll und legen Sie einige Genauigkeitsparameter fest. Wenn Zweifel bestehen, beschreibt this post den Prozess.

Carto3F ist komplexer und ermöglicht eine höhere Genauigkeit, obwohl es etwas schwieriger ist, herauszufinden - viele Parametereinstellungen ohne viel Dokumentation zu erklären. Es gibt auch eine QGIS cartogram plugin, geschrieben in Python. Obwohl ich es nicht zur Arbeit bringen konnte, kann ich dazu nichts sagen.

0

Kurz gesagt, nein. Aber Newman hat eine ausgezeichnete kleine Implementierung seiner und der Methode von Gastner on his website. Die Installation ist einfach und funktioniert über die Befehlszeile. Hier ist ein Beispiel für einen Workflow mit dieser Software, die für mich funktionierte.

  1. Berechnen Sie ein Raster mit Dichteschätzungen über eine Region, z. in Python. Speichern Sie es als Matrix von Zahlen.
  2. Führen Sie das Programm cart mit Ihrer Dichte-Matrix als Eingabe über die Befehlszeile oder als Unterprozess in Python aus.
  3. Das Programm gibt eine Liste neuer Koordinaten für jeden Gitterpunkt zurück.
  4. Verlegen Sie Ihre Shapefile-Punkte durch das Programm interp und in ein neues Shapefile, um die transformierte Karte zu erhalten.

Es gibt nette Anweisungen auf der Hauptseite.