2012-01-21 11 views
8

Jak można wyświetlić mapę taką jak ta w Mathematica? (Np jeden z amerykańskich stanów i prowincji Kanady colourable osobno?) http://upload.wikimedia.org/wikipedia/commons/archive/1/18/20071029031002%21North_America_map_coloured.svgMapa Mathematica North America

Próbowałem importować ścieżki SVG i budować wielokątów (z podejściem opartym na http://mathgis.blogspot.com/2009/11/make-us-county-thematic-map-using.html), ale wygląda o wiele mniej przyjemne niż krzywych w połączonych SVG. Wbudowane bazy danych nie mają kształtów dla stanów USA i prowincji kanadyjskich: tylko dla krajów.

Dzięki!

PS: celem tego jest, aby móc tworzyć mapy choropleth dla danych Stan/Prowincja (tj pokolorować Stany/Prowincje według niektórych danych dotyczących tego stanu/prowincji)

+2

pokrewne: [choropleth mapa w Mathematica] (http://stackoverflow.com/questions/7468271/what-would-a-minimal-example-for-a-choropleth-map-in-mathematica-look -lubić). –

Odpowiedz

11

Można użyć plików .kml lub .kmz, aby uzyskać listę stanów/województw i wielokątów dla ich konturów. Na przykład dla USA można użyć this file. Aby wyodrębnić wielokąty można zrobić coś takiego

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

Następnie wielokąty będzie lista z elementami "state name" -> Polygon[points]. Funkcja transform jest po prostu funkcją pomocniczą, która pobiera Nazwy miejscowe z pliku .kml w pożądanym formacie (w tym przypadku rozdzielając "(rok)" od końca nazw).

Za pomocą tych wielokątów można następnie użyć FaceForm[] do pokolorowania poszczególnych wielokątów. Załóżmy, że mamy listę danych w formularzu "state" -> value, np.

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

Następnie możemy stworzyć mapę według

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

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

który wygląda jak

Mathematica graphics

+0

Chciałbym móc to zrobić więcej niż raz! Dzięki. – lynvie

6

Co za pomocą jakiś obraz przetwarzanie na istniejących obrazach mapy? To tylko prototypowy przepływ pracy. Jest sporo rzeczy do odkrycia z danymi zintegrowanymi z Wolfram. Alfa i przetwarzanie obrazu w Mathematica. Możesz zagrać w nich bardziej szczegółowo. Tak naprawdę nie próbowałem używać danych populacji i odpowiednio kolorować mapy, ale myślę, że jest to możliwe. Funkcja MorphologicalComponents [...] wykrywa i indeksuje stany regionów między granicami.

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, to całkiem miłe! Naprawdę miałem nadzieję na przepływ pracy, który mógłbym rozszerzyć, by tworzyć mapy choropleth (np. Wyświetlać dane stanu/województwa za pomocą koloru), które byłyby trudne w tym podejściu ... – nicolaskruchten

+0

@nicolaskruchten Możesz znaleźć niektóre informacje [tutaj] (http : //stackoverflow.com/q/7468271/616736) przydatne. – abcd

+0

Dzięki! Widziałem to, ale potrzebuję mapy Ameryki Północnej ze zidentyfikowanymi stanami/prowincjami. To nie jest dostępne we wbudowanych bazach danych i nie mam żadnych plików kształtów, tylko pliki SVG. – nicolaskruchten

0

Inną opcją do przedstawienia stanów zaczyna z wykorzystaniem Geographics wyposażone:

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

enter image description here