2012-01-21 23 views
8

Làm thế nào bạn sẽ hiển thị bản đồ như bản đồ này trong Mathematica? (ví dụ: một với các tiểu bang của Hoa Kỳ và các tỉnh của Canada có thể được chia tách riêng biệt?) http://upload.wikimedia.org/wikipedia/commons/archive/1/18/20071029031002%21North_America_map_coloured.svgBản đồ Mathematica Bắc Mỹ

Tôi đã cố gắng nhập đường dẫn SVG và tạo đa giác (với cách tiếp cận dựa trên http://mathgis.blogspot.com/2009/11/make-us-county-thematic-map-using.html) nhưng chúng trông đẹp hơn nhiều so với các đường cong trong liên kết SVG. Cơ sở dữ liệu tích hợp không có hình dạng cho các tiểu bang của Hoa Kỳ và các tỉnh của Canada: chỉ các quốc gia.

Cảm ơn!

PS: mục đích của việc này là để có thể làm cho bản đồ choropleth cho dữ liệu tiểu bang/tỉnh (tức là tô màu bang/tỉnh theo một số dữ liệu liên quan đến tiểu bang/tỉnh)

+2

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

Trả lời

11

Bạn có thể sử dụng tệp .kml hoặc .kmz để nhận danh sách các tiểu bang/tỉnh và đa giác cho các đường viền của chúng. Ví dụ: đối với Hoa Kỳ, bạn có thể sử dụng this file. Để trích xuất các đa giác, bạn có thể làm điều gì đó như thế này

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

Sau đó, đa giác sẽ là danh sách có các thành phần "state name" -> Polygon[points]. Hàm transform chỉ là một hàm trợ giúp để lấy PlacemarkNames từ tệp .kml theo định dạng mong muốn (trong trường hợp này là tước "(năm)" ở cuối tên).

Sử dụng các đa giác này, sau đó bạn có thể sử dụng FaceForm[] để tô màu các đa giác riêng lẻ. Giả sử chúng tôi có danh sách dữ liệu của biểu mẫu "state" -> value, ví dụ:

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

Sau đó, chúng ta có thể tạo ra bản đồ theo

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

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

nào trông giống như

Mathematica graphics

+0

Tôi ước tôi có thể upvote điều này nhiều hơn một lần! Cảm ơn. – lynvie

6

gì về việc sử dụng một số hình ảnh đang xử lý trên các hình ảnh bản đồ hiện có? Đây chỉ là một quy trình làm việc mẫu. Có khá nhiều điều để khám phá với dữ liệu được tích hợp từ Wolfram] Alpha và xử lý hình ảnh trong Mathematica. Bạn có thể chơi chúng tôi một cách chi tiết hơn. Tôi không thực sự cố gắng sử dụng dữ liệu dân số và tô màu bản đồ cho phù hợp, nhưng tôi nghĩ điều đó là có thể. Hàm MorphologicalComponents [...] phát hiện và lập chỉ mục cho biết các vùng giữa các đường biên.

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

Chà, điều đó khá gọn gàng! Tôi đã thực sự hy vọng cho một quy trình làm việc mà tôi có thể mở rộng để tạo ra các bản đồ choropleth (ví dụ: dữ liệu về trạng thái/tỉnh hiển thị thông qua màu sắc) sẽ rất khó khăn với cách tiếp cận này ... – nicolaskruchten

+0

@nicolaskruchten Bạn có thể tìm thấy một số thông tin [ở đây] (http : //stackoverflow.com/q/7468271/616736) hữu ích. – abcd

+0

Cảm ơn! Tôi đã thấy điều đó nhưng những gì tôi cần là một bản đồ của Bắc Mỹ với các bang/tỉnh được xác định. Điều này không có sẵn trong các cơ sở dữ liệu có sẵn và tôi không có bất kỳ tệp hình dạng nào, chỉ các tệp SVG. – nicolaskruchten

0

Một tùy chọn khác để phác thảo các tiểu bang bắt đầu với việc sử dụng Geographics tính năng:

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

enter image description here

Các vấn đề liên quan