2011-12-16 27 views
8

Tôi muốn tạo bản đồ của Hoa Kỳ (có lẽ là bản đồ nhiệt) để hiển thị tần số của một đặc tính nhất định giữa các tiểu bang. Tôi không chắc chắn về những gì gói để sử dụng hoặc nếu dữ liệu của tôi là ở dạng thích hợp. Dữ liệu của tôi nằm trong bảng tfTạo bản đồ nhiệt của Hoa Kỳ với chữ viết tắt của tiểu bang và tần số đặc trưng trong R

tf 
AB AK AL AN AR AZ CA CO CT DC DE EN FL GA HI IA ID IL IN KS 
    1 21 31 1 12 56 316 53 31 16 7 1 335 63 11 42 29 73 40 2 

Phần lớn, chữ viết tắt của tôi là Hoa Kỳ (ngoài một vài trường hợp ở Canada). Cách tiếp cận được đề xuất tốt nhất để hiển thị đồ họa này trên bản đồ là gì?

Bây giờ, làm thế nào để tôi có được độ chi tiết dưới 50 cho mỗi màu?

enter image description here

+1

[Maptools] (http://cran.r-project.org/web/packages/maptools /index.html) ('? maptools') và [maps] (http://cran.r-project.org/web/packages/maps/index.html) ('? maps') sẽ là một điểm khởi đầu tốt đẹp . Bạn cũng có thể thấy [xem nhiệm vụ không gian] (http://cran.r-project.org/web/views/Spatial.html) hữu ích. – Seb

+2

có thể trùng lặp của [Thất nghiệp cấp nhà nước trong R] (http://stackoverflow.com/questions/5385713/state-level-unemployment-in-r) –

Trả lời

7

hai gói: bản đồ, ggplot2. Có một ví dụ tuyệt vời tại: map_data()

chỉ để bắt đầu với:

tf= structure(list(state = structure(1:14, .Label = c("AK", "AL", 
"AR", "AZ", "CA", "CO", "CT", "DE", "FL", "GA", "IA", "IL", "IN", 
"KS"), class = "factor"), num = c(21L, 31L, 12L, 56L, 316L, 53L, 
31L, 7L, 335L, 63L, 42L, 73L, 40L, 2L), region = structure(c(2L, 
1L, 4L, 3L, 5L, 6L, 7L, 8L, 9L, 10L, 13L, 11L, 12L, 14L), .Label = c("alabama", 
"alaska", "arizona", "arkansas", "california", "colorado", "connecticut", 
"delaware", "florida", "georgia", "illinois", "indiana", "iowa", 
"kansas"), class = "factor")), .Names = c("state", "num", "region" 
), class = "data.frame", row.names = c(NA, -14L)) 

require(maps);require(ggplot2) 

states <- map_data("state") 
tfmerged <- merge(states, tf, sort = FALSE, by = "region") 
tfmerged <- tfmerged[order(tfmerged$order), ] 
qplot(long, lat, data = tfmerged, group = group, fill = num, 
geom="polygon") 

Sau đó điền này dựa của các thông tin trạng thái.

+1

Tôi chỉ muốn nối thêm L vào dữ liệu số của tôi sau đó? – megv

+0

@megv, không cần phải thêm một L, tôi chỉ cần thêm rằng để hiển thị dữ liệu tôi đã sử dụng. Những gì bạn có thể cần phải thêm là tên của các tiểu bang để nó phù hợp với các tiểu bang $ khu vực để hợp nhất có thể làm việc. – aatrujillob

+0

Vì tôi đã có một bảng với chữ viết tắt của tiểu bang và đếm có thể tôi chỉ cần chèn trực tiếp vào cấu trúc. Xin lỗi .. Tôi là một chút mới với điều này. – megv

7

Một cách tiếp cận với spplot:

library(maps) 
library(maptools) 
library(sp) 

Đầu đọc dữ liệu và thêm một cột với tên của các trạng thái:

txt <- "AB AK AL AN AR AZ CA CO CT DC DE EN FL GA HI IA ID IL IN KS 
    1 21 31 1 12 56 316 53 31 16 7 1 335 63 11 42 29 73 40 2" 

dat <- stack(read.table(text = txt, header = TRUE)) 
names(dat)[2] <-'state.abb' 
dat$states <- tolower(state.name[match(dat$state.abb, state.abb)]) 

Sau đó, bạn sẽ có được bản đồ và chuyển nó sang một SpatialPolygons:

mapUSA <- map('state', fill = TRUE, plot = FALSE) 
nms <- sapply(strsplit(mapUSA$names, ':'), function(x)x[1]) 
USApolygons <- map2SpatialPolygons(mapUSA, IDs = nms, CRS('+proj=longlat')) 

Và bây giờ bạn thêm thông tin fro m dữ liệu của bạn:

idx <- match(unique(nms), dat$states) 
dat2 <- data.frame(value = dat$value[idx], state = unique(nms)) 
row.names(dat2) <- unique(nms) 

USAsp <- SpatialPolygonsDataFrame(USApolygons, data = dat2) 

Cuối cùng, bạn vẽ nó:

spplot(USAsp['value']) 

gia tăng hình ảnh enter image description here

+0

Bạn có thể thêm hình ảnh của kết quả không? –

+0

Có phương pháp nào để thêm Hawaii và Alaska vào bản đồ này không? – marc

+0

Có, nhưng bạn phải sử dụng một bản đồ khác. Ví dụ, 'mapUSA <- map ('world2', 'USA', fill = TRUE, plot = FALSE)'. –

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