ggplot2如何根据渐变色彩缩放调整元素的渲染/绘制顺序
问题解答
1 ggplot2元素渲染顺序规则
- 图层级顺序:调用ggplot2时,越先声明的geom几何图层越先被渲染,后续图层会覆盖在先绘制的图层上方。
- 单图层内元素顺序:同一个geom图层中的多个元素(比如本例的多条道路线),渲染顺序和传入数据框的行顺序完全一致:数据框中排在前面的行对应元素先绘制,排在后面的行对应元素后绘制、覆盖在先绘制的同图层元素上方。
2 按变量主动调整绘制顺序的实现方法
你要让数值高的元素最后绘制、显示在最上层,只需要在传入geom之前,把数据按照映射到颜色的变量做升序排序即可:数值越小的行越靠前,先绘制;数值越大的行越靠后,后绘制。
修改后的完整示例代码如下:
library(GISTools) library(sf) library(ggplot2) library(dplyr) data(newhaven) # 先按道路长度升序排序数据,再传入geom_sf road_sf <- st_as_sf(roads, "lines") %>% arrange(LENGTH) ggplot() + geom_sf(data = road_sf, aes(col = LENGTH)) + scale_colour_gradient(low = "grey", high = "red")
修改后的放大视图代码如下:
ggplot() + geom_sf(data = road_sf, aes(col = LENGTH, size = 3)) + scale_colour_gradient(low = "grey", high = "red") + coord_sf(xlim = c(557000, 560000), ylim = c(178000, 180000)) + annotate(geom = "curve", x = 558000, y = 178500, xend = 558850, yend = 179150, curvature = -.3, arrow = arrow(length = unit(3, "mm")))
如果后续需要适配交通流量等其他连续变量,只需把arrange()中的字段替换为对应变量即可,逻辑完全一致。
内容的提问来源于stack exchange,提问作者krenz
相关产品推荐
相关产品推荐

