我正在尝试使用来自不同数据框的数据构建ggplot2
地图。
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)
xx.sub1@data$id <- rownames(xx.sub1@data)
xx.sub1.points <- fortify(xx.sub1, region="id")
xx.sub1.df = plyr::join(xx.sub1.points, xx.sub1@data, by="id")
xx.sub2@data$id <- rownames(xx.sub2@data)
xx.sub2.points <- fortify(xx.sub2, region="id")
xx.sub2.df = plyr::join(xx.sub2.points, xx.sub2@data, 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 = RColorBrewer::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")
到目前为止,一切都按照预期工作并且我得到了一个漂亮的地图:
然而,我想要做出的改变是为来自xx.sub1.df
的数据添加单独的图例 - 因为所有多边形都只被灰色填充,所以我希望它会是一个额外条目。
我该如何实现这个?
scales
包,看看是否有其他方法。 - Ben Bolkerdput
数据,这样就可以用更新的热图回答你的问题了。我猜测:(1) 你只使用了xx.sub2
的两列,(2) 如果州在xx.sub1
中出现,则它们会呈灰色。因此,连接似乎并不那么麻烦。你可以在xx.sub2
中简单地添加一个因子,以表示在xx.sub1
中存在的条目,并且也许可以使用scale_fill_manual
来调整图例中的颜色。 - G Chalanconmaptools
包中的示例数据,希望能够重现一个示例(我相信不再需要使用dput
了?)。至于第1点和第2点 - 对于玩具示例来说,所有有效选项。然而,对于真实情况,数据集更加复杂,您的解决方案将更难实现。因此,我希望能够在没有连接的情况下处理“独立”的数据框,以实现这一目标。 - radekgeom_polygon
)的不同比例尺。据我所知,在ggplot2中这是不可能的,但是我有一个建议:使用不同的注释(例如geom_text
)来标记“灰色”区域如何?这将给您带来2个图例,但我知道这可能并不令人满意。还有一件事:在实际情况下,xx.sub1.df
的区域是否可能与xx.sub2.df
重叠? - G Chalancongeom_text
实际上可能是一个好主意,所以如果您使用这种方法成功地实现了什么,请告诉我! - radek