Próbuję utworzyć mapę w ggplot2
przy użyciu danych z oddzielnych ramek danych.W ggplot2, jak mogę dodać dodatkową legendę?
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")
Do tego momentu wszystko działa zgodnie z oczekiwaniami i uzyskać ładny mapę:
Co chciałbym zmienić jednak jest dodanie oddzielnego legendę dla danych z xx.sub1.df
- od wszystkie wielokąty są wypełnione szarym, mam nadzieję, że będzie to dodatkowy wpis.
Jak mogę to osiągnąć?
odtwarzalny przykład (http://tinyurl.com/reproducible-000), proszę? Kanonicznym sposobem rozwiązania tego problemu jest scalenie zestawów danych, w tym zmienna czynnikowa określająca, z której oryginalnej serii danych pochodzi każdy zestaw danych, następnie użycie estetyki (w twoim przypadku dla wypełnienia, myślę) ... możesz spojrzeć na pakiet 'scale', aby sprawdzić, czy istnieje inny sposób. –
@BenBolker Roger that. Dodano przykład. Jestem świadomy, że łatwiej byłoby mieć wszystko w jednym df. Jednak często pracuję z różnymi warstwami danych (może to być moja stronniczość pochodząca z tła GIS), które byłyby bólem w szyi. I w tym konkretnym przykładzie muszę wybrać kilka wielokątów i "podświetlić" lub "zamaskować" je w szybki sposób. – radek
Czy możesz dodać "dput" swoich danych, aby można było odpowiedzieć na twoje pytanie zaktualizowaną mapą termiczną? Zgaduję, że: (1) używasz tylko dwóch kolumn 'xx.sub2', (2) stany są szare, jeśli są obecne w' xx.sub1'. Dlatego dołączenie nie wydaje się takie denerwujące. Możesz po prostu dodać czynnik w 'xx.sub2' dla wpisów, które są w' xx.sub1', i być może użyć 'scale_fill_manual' aby dopasować kolory w legendzie. –