2017-10-27 3 views
0

Ich bin mit diesem ggplot2 Code, um eine US-Karte zu erstellen:Farbe bestimmte Zustände auf einer US-Karte

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

Jetzt habe ich eine Reihe von Staaten, die Ich mag würde rot malen und ein paar ich malen möchte Grün. Wie folgt aus:?

states_positive <- c("New York") 
states_negative <- c("Texas") 

Irgendwelche Gedanken darüber, wie ich sicherstellen kann, dass nur diese Staaten in der entsprechenden Farbe auf der Karte markiert sind \

+1

Hilft diese Frage? https://stackoverflow.com/questions/29614972/ggplot-us-state-map-colors-are-fine-polygons-jagged-r. Fügen Sie einfach eine Spalte hinzu, um die Farbe mit zu steuern. – MrFlick

Antwort

1

Ähnlich wie die Antwort auf James Thomas Durant, sondern reflektiert die ursprüngliche Struktur des Datensatzes ein bisschen mehr und Schneiden weniger benötigte Sätze:

library(ggplot2) 
library(dplyr) 

all_states <- map_data("state") 
# Add more states to the lists if you want 
states_positive <-c("new york") 
states_negative <- c("texas") 

Innerhalb ggplot, wenn Sie die gleiche Datenmenge subsetting, können Sie die Ästhetik im ersten ggplot() gesetzt argu Sie werden für alle Ebenen innerhalb des Plots verwendet.

# Plot results 
ggplot(all_states, aes(x=long, y=lat, group = group)) + 
    geom_polygon(fill="grey", colour = "white") + 
    geom_polygon(fill="green", data = filter(all_states, region %in% states_positive)) + 
    geom_polygon(fill="red", data = filter(all_states, region %in% states_negative)) 

enter image description here

Ich bin so zu Stackoverflow nicht sicher war, ob diese Änderungen an der ursprünglichen Antwort gemacht haben sollte, aber ich spürte die Veränderungen wesentlich genug waren auf ihre eigenen zu stellen. Bitte sagen Sie, dass ich falsch liege :)

+1

Nun, ich habe etwas Neues gelernt, also habe ich es gewählt! –

1
library(ggplot2) 
library(raster) 

all_states <- map_data("state") 

data <- data.frame(Row.Labels=all_states$region, 
        LATITUDE=all_states$lat, 
        LONGITUDE=all_states$long) 

data$positive <- ifelse(data$Row.Labels=="new york", "Yes", "No") 

usa <- getData('GADM', country="US", level=1) 
f_usa <- fortify(usa) 
i <- sapply([email protected]$NAME_1, function(x) agrep(x, data$Row.Labels, max.distance=.3, ignore.case=T)[1]) 
[email protected]$positive <- data$positive[i] 
f_usa <- merge(x=f_usa, y=unique([email protected]), by.x="id", by.y="ID_1",all.x=T) 
f_usa <- f_usa[with(f_usa, order(id, order)), ] 
f_usa$positive[is.na(f_usa$positive)] <- "No" 
ggplot(f_usa, aes(x=long, y=lat, group=group, fill=positive)) + 
    geom_polygon(colour="black") 

Wiederholen Sie dann mit einer anderen Farbe für „negativ“.

2

Sie können auch fügen Sie einfach manuell die Polygone:

library(ggplot2) 
library(dplyr) 
all_states <- map_data("state") 
p <- ggplot() 
p <- p + geom_polygon(data=all_states, aes(x=long, y=lat, group = group),colour="white", fill="grey30") 


ny <- filter(all_states, region == "new york") 
tx <- filter(all_states, region == "texas") 


p + geom_polygon(data = ny, aes(x=long, y=lat, group = group),fill="red") + 
    geom_polygon(data = tx, aes(x=long, y=lat, group = group),fill="blue") 

enter image description here

Verwandte Themen