2017-12-13 1 views
3

Ich habe eine Shapefile here hochgeladen.Chloropleth: Kontrollpolygonfüllungen

#First, read it in 
library(rgdal) 
pols <- readOGR(dsn="stack", layer="shapefile") 

plot.df <- broom::tidy(pols, by="nr") %>% mutate(id = as.numeric(id)) 

#some values I'd like to plot 
plot.df$value[plot.df$id==0] <- 4 
plot.df$value[plot.df$id==1] <- 3 
plot.df$value[plot.df$id==2] <- 3 

library(ggplot2) 
ggplot(plot.df, aes(x=long, y=lat))+ 
    geom_polygon(aes(fill=factor(value), group=group))+ 
    coord_fixed()+ 
    scale_fill_manual(values = c("red", "green", "blue", "orange"), 
       breaks = c("1", "2", "3", "4")) 

Dieser Code sollte die folgenden Plot erzeugen: enter image description here

Die Sache ist, dass ich ein anderes Polygon haben, die (farbig in grün) erscheinen soll.

Ich habe mit einer Vermeidung des Problems kommen:

ggplot(plot.df, aes(x=long, y=lat))+ 
    geom_polygon(aes(fill=factor(value), group=group))+ 
    geom_polygon(data=subset(plot.df, id==0), aes(fill=factor(value), group=group))+ 
    coord_fixed()+ 
    scale_fill_manual(values = c("red", "green", "blue", "orange"), 
       breaks = c("1", "2", "3", "4")) 

enter image description here

Aber ich bin sicher, dass es eine elegantere Lösung. Die Verwendung von id als Gruppierungsvariable wie vorgeschlagen here führt zu verzerrten Polygonen.

Hat jemand noch andere Ideen?

Antwort

0

Die Polygone überlappen, Sie können alpha festlegen.

ggplot(plot.df, aes(x = long, y = lat)) + 
    geom_polygon(aes(fill = factor(value), group = group), alpha = .4)+ 
    coord_fixed() + 
    scale_fill_manual(values = c("red", "green", "blue", "orange"), breaks = c("1", "2", "3", "4")) + 
    theme(legend.position = 'none') 

enter image description here

+0

Ich möchte die Kontrolle über das Plotten sein, um ... – Thomas