2012-01-21 17 views
8

Come renderesti una mappa come questa in Mathematica? (ad esempio, uno con Stati Uniti e province canadesi separatamente)? ​​http://upload.wikimedia.org/wikipedia/commons/archive/1/18/20071029031002%21North_America_map_coloured.svgMathematica Nord America mappa

Ho provato a importare i percorsi SVG e creare poligoni (con un approccio basato su http://mathgis.blogspot.com/2009/11/make-us-county-thematic-map-using.html) ma sembrano molto meno belli delle curve nel collegamento SVG. I database integrati non sembravano avere forme per gli stati degli Stati Uniti e le province canadesi: solo i paesi.

Grazie!

PS: lo scopo di questo è quello di essere in grado di fare mappa coropletica per i dati di stato/provincia (ad esempio per colorare Stati/province secondo alcuni dati relativi a tale stato/provincia)

+2

correlati: [mappa choropleth a mathematica] (http://stackoverflow.com/questions/7468271/what-would-a-minimal-example-for-a-choropleth-map-in-mathematica-look -piace). –

risposta

11

È possibile utilizzare i file .kml o .kmz per ottenere un elenco di stati/province e poligoni per i loro contorni. Ad esempio per gli Stati Uniti è possibile utilizzare this file. Per estrarre i poligoni che si potrebbe fare qualcosa di simile

usa = Import["http://code.google.com/apis/kml/documentation/us_states.kml", 
    "Data"]; 

transform[s_] := StringTrim[s, Whitespace ~~ "(" ~~ ___ ~~ ")"] 

polygons = Thread[transform["PlacemarkNames" /. usa[[1]]] -> 
    ("Geometry" /. usa[[1]])]; 
stateNames = polygons[[All, 1]]; 

Poi poligoni sarà una lista con gli elementi "state name" -> Polygon[points]. La funzione transform è solo una funzione di supporto per ottenere i nomi di Placemark dal file .kml nel formato desiderato (in questo caso stripping "(year)" alla fine dei nomi).

Utilizzando questi poligoni è possibile utilizzare per colorare i singoli poligoni. Supponiamo di avere un elenco di dati del modulo "state" -> value, ad es.

data = Thread[regionNames -> RandomReal[{0, 1}, Length[regionNames]]]; 

Poi possiamo creare la mappa in base alle

colourf = ColorData["Temperature"]; 
element[value_, poly_] := GraphicsGroup[{EdgeForm[Black], FaceForm[colourf[value]], poly}] 

Graphics[{element @@@ Transpose[regionNames /. {data, polygons}]}] 

che si presenta come

Mathematica graphics

+0

Vorrei poterlo sospendere più di una volta! Grazie. – lynvie

6

Cosa succede ad usare qualche immagine elaborazione su immagini di mappe esistenti? Questo è solo un prototipo di flusso di lavoro. Ci sono alcune cose da esplorare con i dati integrati da Wolfram] Alpha e l'elaborazione delle immagini in Mathematica. Puoi giocarci in dettaglio. Non ho davvero provato a usare i dati sulla popolazione e a colorare la mappa di conseguenza, ma penso che sia possibile. Funzione MorphologicalComponents [...] rileva e indicizza le regioni degli stati tra i confini.

map = WolframAlpha["Illinois", {{"Location:USStateData", 1}, "Image"}] 

enter image description here

bmap = Binarize[map, .7] 

enter image description here

dmap = [email protected][[email protected], .75] 

enter image description here

MorphologicalComponents[dmap] // Colorize 

enter image description here

+0

Wow, è molto carino! Speravo davvero in un flusso di lavoro che potessi estendere per creare mappe di coropleta (ad es. Visualizzare dati di stato/provincia via colore) che sarebbe difficile con questo approccio ... – nicolaskruchten

+0

@nicolaskruchten Potresti trovare alcune delle informazioni [qui] (http : //stackoverflow.com/q/7468271/616736) utile. – abcd

+0

Grazie! L'ho visto, ma quello di cui ho bisogno è una mappa del Nord America con stati/province identificati. Questo non è disponibile nei database integrati e non ho file di forma, solo file SVG. – nicolaskruchten

0

Un'altra opzione per delineare gli stati inizia con utilizzando le GeoGraphics caratteristica:

GeoGraphics[ 
{ 
EdgeForm[Black], 
Polygon[CountryData["UnitedStates", "AdministrativeDivisions"]] 
} 
GeoBackground -> None, 
GeoProjection -> "Mercator" 
] 

enter image description here