Sto provando a creare una mappa in ggplot2
utilizzando dati da frame di dati separati.In ggplot2, come posso aggiungere una legenda aggiuntiva?
library(maptools)
xx <- readShapePoly(system.file("shapes/sids.shp", package="maptools")[1], IDvar="FIPSNO", proj4string=CRS("+proj=longlat +ellps=clrk66"))
xx.sub1 <- subset(xx, xx$FIPSNO < 37010)
xx.sub2 <- subset(xx, xx$FIPSNO > 37010)
[email protected]$id <- rownames([email protected])
xx.sub1.points <- fortify(xx.sub1, region="id")
xx.sub1.df = join(xx.sub1.points, [email protected], by="id")
[email protected]$id <- rownames([email protected])
xx.sub2.points <- fortify(xx.sub2, region="id")
xx.sub2.df = join(xx.sub2.points, [email protected], by="id")
ggplot(xx.sub2.df) +
aes(long, lat, fill = (SID79/BIR79)*1000, group = group) +
geom_polygon() + geom_path(color="grey80") +
coord_equal() +
scale_fill_gradientn(colours = brewer.pal(7, "YlOrBr")) +
geom_polygon(data = xx.sub1.df, fill = "grey50") +
geom_path(data = xx.sub1.df, color="grey80") +
labs(fill = "Mapped value", title = "Title")
Fino a questo punto tutto funziona come previsto e ho un bel mappa:
Quello che mi piacerebbe cambiare però è quello di aggiungere leggenda separata per i dati da xx.sub1.df
- dal tutti i poligoni sono solo pieni di grigio spero che sarà una voce aggiuntiva.
Come posso ottenere quello?
esempio riproducibile (http://tinyurl.com/reproducible-000) per favore? Il modo canonico per risolvere questo problema è quello di unire i set di dati, tra cui una variabile fattore che identifica i dati originali da cui proviene ciascun set di dati, quindi usa un aspetto estetico (nel tuo caso per riempimento, credo) ... potresti guardare il pacchetto 'scale 'per vedere se c'è un altro modo –
@BenBolker Roger. Esempio aggiunto. Sono consapevole che sarebbe molto più facile avere tutto in un df. Tuttavia, lavoro spesso con diversi livelli di dati (potrebbe essere il mio pregiudizio di venire dal background GIS) che sarebbe un dolore al collo di aderire. E in questo particolare esempio ho bisogno di selezionare pochi poligoni e "evidenziare" o "mascherarli" in modo rapido. – radek
Potresti aggiungere un 'dput' dei tuoi dati, in modo che uno possa rispondere alla tua domanda con una heatmap aggiornata? Sto supponendo che: (1) tu usi solo 2 colonne di 'xx.sub2', (2) gli stati appaiono grigi se sono presenti in' xx.sub1'. Quindi unirsi non sembra così fastidioso. Potresti semplicemente aggiungere un fattore in 'xx.sub2' per le voci che sono in' xx.sub1', e forse usare 'scale_fill_manual' per regolare i colori nella legenda. –