2014-06-26 14 views
5

Tiếp theo là Hoa Kỳ khẳng định dữ liệu ví dụ từ state.x77 bộ dữ liệu trong r:Vẽ barchart trên bản đồ Kỳ trong R

mydf = structure(list(usa_state = structure(1:5, .Label = c("Alabama", 
"Alaska", "Arizona", "Arkansas", "California"), class = "factor"), 
    Life.Exp = c(69.05, 69.31, 70.55, 70.66, 71.71), HS.Grad = c(41.3, 
    66.7, 58.1, 39.9, 62.6)), .Names = c("usa_state", "Life.Exp", 
"HS.Grad"), class = "data.frame", row.names = c(NA, -5L)) 

> mydf 
    usa_state Life.Exp HS.Grad 
1 Alabama 69.05 41.3 
2  Alaska 69.31 66.7 
3 Arizona 70.55 58.1 
4 Arkansas 70.66 39.9 
5 California 71.71 62.6 
> 

Tôi muốn âm mưu nó trên Hoa Kỳ khẳng định bản đồ. Tôi có thể vẽ bản đồ bằng cách sử dụng đoạn mã sau:

all_states <- map_data("state") 
ggplot() + geom_polygon(data=all_states, aes(x=long, y=lat, group = group),colour="gray", fill="white") 

enter image description here

Nhưng tôi không thể vẽ barcharts trên bản đồ. Cảm ơn bạn đã giúp đỡ.

+1

Bạn cần biết rằng có ba mô hình âm mưu 2d riêng biệt trong R. –

+0

Một số chi tiết khác liên quan đến điều này từ một người có kinh nghiệm như bạn sẽ được nhiều người đánh giá cao. – rnso

+0

@mso - bạn đã có cơ hội để xem câu trả lời của tôi dưới đây có giúp ích gì không? – micstr

Trả lời

1

tôi vẽ trên hai nguồn tuyệt vời để trả lời này:

SOLUTION

mydf <- structure(list(usa_state = 
         structure(1:5, 
            .Label = c("Alabama", "Alaska", "Arizona", "Arkansas", "California"), class = "factor"), 
         Life.Exp = c(69.05, 69.31, 70.55, 70.66, 71.71), 
         HS.Grad = c(41.3, 66.7, 58.1, 39.9, 62.6)), 
       .Names = c("usa_state", "Life.Exp", "HS.Grad"), 
       class = "data.frame", row.names = c(NA, -5L)) 

library(ggplot2) 
library(maps) 
library(RColorBrewer) # lots of color palettes for these kind of charts 

library(data.table) # for sorting by key 
library(mapproj) #coord_maps() needed this 

all_states <- map_data("state") 

# You need to merge dataset with maps one with long and lat. 
# But you need same key so lets change state to region used in maps all_states 
# Note I lowercased it to get the match 

mydf$region <- tolower(mydf$usa_state) 
totaldf <- merge(all_states, mydf, by = "region") 

# switched to data.table to fix the cut up map issue 
# getting sort by region then order 
totaldt <- as.data.table(totaldf) 
setkey(totaldt, region, order) 

ggplot(data = totaldt, 
     aes(x = long, y = lat, group = group, fill = HS.Grad)) + 
    geom_polygon() + coord_map() + 
    scale_fill_gradientn("", colours=brewer.pal(9, "GnBu")) 

Đừng quên để sắp xếp ME

Nếu dữ liệu của bạn không được sắp xếp đúng theo vùng và sau đó theo thứ tự, n bạn sẽ nhận được bản đồ chắp vá như thế này.

sliced up map

tôi sử dụng data.table gói và chìa khóa dữ liệu. Data.table cũng nhanh hơn nhiều nếu bạn cần hợp nhất nhiều dữ liệu. Bạn sử dụng định dạng X [Y] cho điều này. Xem data.table cheatsheet nếu bạn chưa quen với gói này.

MAP CUỐI CÙNG

này dành cho HS.Grid trong ví dụ của bạn. Nhận bảng xếp hạng khác của bạn bằng cách thay đổi fill = myvariable

map example for HS.grid

Lưu ý không phải tất cả các trạng thái được hiển thị, bởi vì các dữ liệu thử nghiệm được giới hạn ở những tiểu bang này. Trong ví dụ đầy đủ hơn, bạn sẽ thấy nhiều trạng thái hơn.

Ngoài ra, bạn sẽ thấy Alaska bị thiếu. Nó không có trong bản đồ - xem this answer từ @jazzurro để kiểm tra thực tế về tên tiểu bang với setdiff.

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