2011-09-19 8 views
6

Jaki byłby minimalny przykład dla mapy choropleth w języku Mathematica?Jaki byłby minimalny przykład dla mapy choropleth w Mathematica?

Mogę odczytać w pliku kształtu ESRI przy użyciu Import, ale nie wiem, jak pracować z zaimportowanym wynikiem.

+2

[to] (http://mathgis.blogspot.com/2009/11/make-us-county-thematic-map-using.html) bieguna z _LunchTime Plac zabaw, zabawa z Mathematica, na ** Jak stworzyć mapę tematyczną powiatu w USA z Mathematica ** może zainteresować? – tomd

+1

Niezły link, Tom. Oto kolejna, demo @Karsten: Michael Shreiber, ["Porównanie krajów z kolorami"] [1] [1]: http://demonstrations.wolfram.com/ColorcodedCountryComparison/ – DavidC

Odpowiedz

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

enter image description here

I dlaczego wymiana? Jeśli nie ma danych o wymaganym typie dla danego kraju, parametr CountryData zwraca wartość Missing ["NotAvailable"], powodując, że ColorData i jego podstawowa funkcja Blend nie zwracają określonej wartości RGB. Zastępuję ten nieoceniony Blend kolorem żółtym.

+0

Dobry przykład, ciekawe wykorzystanie ColorData i Rescale . Dzięki! –

+0

wow! To miłe –

5

tylko w celach informacyjnych, oto kilka wskazówek do pracy z ESRI Shapefiles. CountryData nie dostarcza danych na poziomie powiatu dla Niemiec (jednostka administracyjna nazywa się "Kreis"), dlatego napisałem własną funkcję KreisData. Plik kształtu, którego używałem, może być downloaded for free, ale należy wziąć pod uwagę warunki użytkowania.

Funkcja KreisData zostaje utworzony w następujący sposób:

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; 

Dzięki tej funkcji, a kod przykład Sjoerd C. de Vries, mapa Niemiec jest utworzony w sposób następujący:

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

Ponieważ nie mogę oprzeć się konkurencji Code Golf z belisarius:

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

(na ten sam rezultat)

Powiązane problemy