如何将Terra包中Shapefile的多幅绘图合并到单一面板并共用图例?
问题:将多幅terra绘图合并到同一面板并共用图例
我们使用terra包的示例Shapefile数据:
library(terra) v <- vect(system.file("ex/lux.shp", package="terra"))
目前已写出分三个不同y轴范围的绘图代码:
plot(v, "NAME_1", col=rainbow(25), border=c("gray"),ylim=c(49.5, 50)) plot(v, "NAME_1", col=rainbow(25), border=c("gray"),ylim=c(50, 50.5)) plot(v, "NAME_1", col=rainbow(25), border=c("gray"),ylim=c(49, 49.5))
请问如何将这三幅绘图展示在同一个面板中,并共用一个图例?
解决方案
你可以通过自定义绘图布局并单独绘制图例的方式实现需求,具体操作如下:
- 先统一颜色调色板,保证三个子图配色一致:
col_pal <- rainbow(25)
- 设置面板布局,为图例预留空间。比如设置3行2列的布局,右侧窄列用于放置图例:
layout(matrix(c(1,2,3,4,4,4), nrow=3, ncol=2), widths=c(4,1))
- 依次绘制三个子图,关闭自动生成的图例(
legend=FALSE):
plot(v, "NAME_1", col=col_pal, border="gray", ylim=c(49.5, 50), legend=FALSE) plot(v, "NAME_1", col=col_pal, border="gray", ylim=c(50, 50.5), legend=FALSE) plot(v, "NAME_1", col=col_pal, border="gray", ylim=c(49, 49.5), legend=FALSE)
- 在预留位置绘制共用图例:
labels <- unique(v$NAME_1) legend("center", legend=labels, fill=col_pal[1:length(labels)], bty="n")
如果希望图例放在底部,可调整布局矩阵:
layout(matrix(c(1,2,3,4), nrow=4, ncol=1), heights=c(3,3,3,1)) # 重复绘制三个子图(legend=FALSE) plot(v, "NAME_1", col=col_pal, border="gray", ylim=c(49.5, 50), legend=FALSE) plot(v, "NAME_1", col=col_pal, border="gray", ylim=c(50, 50.5), legend=FALSE) plot(v, "NAME_1", col=col_pal, border="gray", ylim=c(49, 49.5), legend=FALSE) # 绘制水平图例 legend("center", legend=labels, fill=col_pal[1:length(labels)], bty="n", horiz=TRUE)
这样就能让三个子图在同一面板展示,且共用一个统一的图例。
内容的提问来源于stack exchange,提问作者Tpellirn
相关产品推荐
相关产品推荐

