2012-01-21 11 views
8

¿Cómo representaría un mapa como este dentro de Mathematica? (Por ejemplo, uno con estados de Estados Unidos y provincias de Canadá coloreables por separado?) http://upload.wikimedia.org/wikipedia/commons/archive/1/18/20071029031002%21North_America_map_coloured.svgMapa de Mathematica Norteamérica

he tratado de importar los caminos SVG y construir polígonos (con un enfoque basado en http://mathgis.blogspot.com/2009/11/make-us-county-thematic-map-using.html) pero tienen un aspecto mucho menos agradable que las curvas en el ligada SVG. Las bases de datos integradas no parecían tener formas para los estados de EE. UU. Y las provincias canadienses: solo países.

Gracias!

PD: el objetivo de esto es ser capaz de hacer mapas choropleth para los datos de estado/provincia (es decir, para dar color a los estados/provincias de acuerdo con algunos datos relacionados con ese estado/provincia)

+2

relacionadas: [mapa coropletas en Mathematica] (http://stackoverflow.com/questions/7468271/what-would-a-minimal-example-for-a-choropleth-map-in-mathematica-look -me gusta). –

Respuesta

11

Puede usar archivos .kml o .kmz para obtener una lista de estados/provincias y polígonos para sus contornos. Por ejemplo, para EE. UU., Podría usar this file. Para extraer los polígonos que podría hacer algo como esto

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]]; 

Entonces polígonos será una lista con los elementos "state name" -> Polygon[points]. La función transform es solo una función de ayuda para obtener los PlacemarkNames del archivo .kml en el formato deseado (en este caso, quitando "(año)" del final de los nombres).

Usando estos polígonos puede usar FaceForm[] para colorear los polígonos individuales. Supongamos que tenemos una lista de datos del formulario "state" -> value, p.

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

entonces podemos crear el mapa de acuerdo a

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

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

que se parece a

Mathematica graphics

+0

¡Ojalá pudiera votar esto más de una vez! Gracias. – lynvie

6

¿Qué pasa con el uso de alguna imagen procesamiento en imágenes de mapas existentes? Esto es solo un flujo de trabajo prototipo. Hay bastantes cosas para explorar con datos integrados de Wolfram] Alpha y procesamiento de imágenes en Mathematica. Puedes jugar a estos con más detalle. Realmente no traté de usar los datos de la población y colorear el mapa en consecuencia, pero creo que es posible. Función MorphologicalComponents [...] detecta e indexa regiones de estados entre los bordes.

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

¡Guau, eso es bastante limpio! Realmente estaba esperando un flujo de trabajo que pudiera ampliar para hacer mapas de coropletas (por ejemplo, visualizar datos de estado/provincia por color) que sería difícil con este enfoque ... – nicolaskruchten

+0

@nicolaskruchten Puede encontrar algo de la información [aquí] (http : //stackoverflow.com/q/7468271/616736) útil. – abcd

+0

¡Gracias! Lo he visto pero lo que necesito es un mapa de América del Norte con estados/provincias identificadas. Esto no está disponible en las bases de datos integradas, y no tengo ningún archivo de formas, solo archivos SVG. – nicolaskruchten

0

Otra opción para delinear los estados comienza con el uso de los GeoGraphics Característica:

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

enter image description here