2014-06-26 30 views
5

Im Folgenden USA Beispieldaten aus state.x77-Datensatz in r heißt es:Plotten barchart auf Staaten Karte in 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 
> 

ich möchte es plotten auf USA Karte erklärt. Ich kann die Karte mit folgendem Code plottet:

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

Aber ich bin nicht in der Lage Balkendiagramme über die Karte zu zeichnen. Danke für Ihre Hilfe.

+1

Sie müssen lernen, dass es drei verschiedene 2D-Plotten Paradigmen in R. –

+0

Einige weitere Details in Bezug auf diese von einer erfahrenen Person wie Sie werden sehr geschätzt werden. – rnso

+0

@mso - hatten Sie eine Chance zu sehen, ob meine Antwort unten hilft? – micstr

Antwort

1

zog ich auf zwei große Quellen diese zu beantworten:

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")) 

NICHT VERGESSEN SIE MICH zu SORTIEREN

Wenn Ihre Daten nicht nach Region und dann nach Bestellung korrekt sortiert sind, wird die Sie werden so lückenhafte Karten bekommen.

sliced up map

Ich benutze data.table Paket und Schlüssel die Daten. Auch data.table ist viel schneller, wenn Sie viele Daten zusammenführen müssen. Sie verwenden dafür das Format X [Y]. Siehe data.table cheatsheet, wenn Sie neu in diesem Paket sind.

FINAL MAP

Dies ist für die HS.Grid in Ihrem Beispiel ist. Holen Sie sich Ihre andere Grafik durch die fill = myvariable

map example for HS.grid

Hinweis nicht alle Zustände gezeigt ändern, weil die Testdaten für diese Staaten beschränkt ist. In einem volleren Beispiel werden Sie mehr Zustände sehen.

Auch Sie werden sehen, dass Alaska fehlt. Es ist nicht in den Karten - siehe this answer von @jazzurro für praktische Tests auf Zustandsnamen mit setdiff.