2011-09-19 21 views
6

¿Cómo sería un ejemplo mínimo de un mapa choropleth en Mathematica?¿Qué aspecto tendría un ejemplo mínimo de un mapa de coropletas en Mathematica?

Puedo leer en un archivo de forma ESRI utilizando Import, pero no sé cómo trabajar con el resultado importado.

+2

[Esto] post (http://mathgis.blogspot.com/2009/11/make-us-county-thematic-map-using.html), desde _LunchTime Playground, Fun with Mathematica_, on ** ¿Cómo hacer un mapa temático del condado de EE. UU. Con Mathematica ** podría ser de su interés? – tomd

+1

Buen enlace, Tom. Aquí hay otra, @Karsten: demo de Michael Shreiber, ["Comparación de país codificada por colores"] [1] [1]: http://demonstrations.wolfram.com/ColorcodedCountryComparison/ – DavidC

Respuesta

7
Graphics[ 
    { 
    ColorData["ThermometerColors"][ 
          Rescale[CountryData[#, "GDPPerCapita"], {100, 50000}] 
            ] /. HoldPattern[Blend[___]] -> Yellow, 
    CountryData[#, "Polygon"] 
    } & /@ 
    CountryData[] 
] 

enter image description here

Y por qué el reemplazo? Si no hay datos del tipo requerido para un país determinado, CountryData devuelve Missing ["NotAvailable"], lo que causa ColorData, y su función Blend subyacente no devuelve un valor RGB específico. Sustituyo este Blend no evaluado con el color Amarillo.

+0

Buen ejemplo, uso interesante de ColorData y Reescalado . ¡Gracias! –

+0

¡guau! eso es bueno –

5

Sólo como referencia, aquí algunos consejos para trabajar con archivos de forma ESRI. CountryData no proporciona datos a nivel de condado para Alemania (la unidad administrativa se llama "Kreis"), por lo que escribí mi propia función KreisData. El archivo de forma que utilicé puede ser downloaded for free, sin embargo, hay términos de uso a considerar.

La función KreisData continuación, se crea de la siguiente manera:

shp = Import["C:/TEMP/map/VG2500/vg2500_krs.shp", "Data"]; 
polys = "Geometry" /. First[shp]; 
ags = "RS" /. ("LabeledData" /. First[shp]); 
names = "GEN" /. ("LabeledData" /. First[shp]); 
area = "SHAPE_AREA" /. ("LabeledData" /. First[shp]); 
KreisDataRules = 
    Dispatch[MapThread[ 
    Rule[#1, #2] &, {ags, Transpose[{polys, area, names}]}]]; 
KreisData[tag_String, "Polygon"] := First[tag /. KreisDataRules]; 
KreisData[tag_String, "Area"] := Part[tag /. KreisDataRules, 2]; 
KreisData[tag_String, "Name"] := Last[tag /. KreisDataRules]; 
KreisData[] := ags; 

Con esta función, y el código de ejemplo, por Sjoerd C. de Vries, un mapa de Alemania se crea de este modo:

renderMap[scheme_String] := 
    Graphics[{ColorData[scheme][ 
     Rescale[KreisData[#, "Area"], {3.63067036816521*10^7, 
      3.08469540395003*10^9}]] /. 
     HoldPattern[Blend[___]] -> Yellow, KreisData[#, "Polygon"]} & /@ 
    KreisData[]]; 
Manipulate[renderMap[s], {s, ColorData["Gradients"]}] 

Result with "GrayTones" color scheme

2

Porque no puedo resistir una competencia de Code Golf con belisarius:

Graphics[{Hue[i~#~"Area"/10^7],i~#~"Polygon"}~Table~{i,#[]}&@CountryData] 

(para el mismo resultado)

Cuestiones relacionadas