如何单独访问意大利统计局Shapefile中的嵌套地图对象?
如何访问sf对象中嵌套的单个地图图层?
嘿,我懂你遇到的情况——用sf包读取意大利统计局的选区Shapefile后,一运行plot(italia)就弹出了好多个小地图,感觉像是对象里嵌套了好几个图层对吧?其实这是sf的默认行为:它会自动遍历数据里的所有数值型/类别型属性字段,把每个字段都当成可绘制的图层来生成子图。下面教你几种单独访问每个图层的方法:
第一步:先查看所有可用的图层(字段)
首先你得知道这个sf对象里有哪些可绘制的字段,用names()函数就能快速查看:
# 查看sf对象的所有属性字段名 names(italia)
运行后你会看到类似COD_REG(大区编码)、DES_REG(大区名称)、COD_PROV(省份编码)这类字段,每个字段都对应一个可绘制的地图图层。
方法1:用$符号提取字段并绘制
直接用$提取目标字段,不过要注意保留sf的空间属性才能正确绘制地图,所以推荐用方括号包裹字段名的方式:
# 提取"DES_REG"字段对应的地图图层(保留空间信息) italia_regioni <- italia["DES_REG"] # 绘制这个单独的图层 plot(italia_regioni, main = "意大利大区选区地图")
如果直接写italia$DES_REG,得到的只是纯属性值,没有空间信息,没法直接绘图。
方法2:按列索引提取图层
如果你知道目标字段在sf对象里的列位置,也可以用方括号按索引提取:
# 提取第3列对应的图层(假设第3列是你要的字段) italia_target_layer <- italia[, 3] # 绘制该图层 plot(italia_target_layer)
方法3:直接在plot()中指定字段
不用提前提取图层,直接在plot()函数里指定要绘制的字段就行,非常高效:
# 直接指定绘制"COD_PROV"字段对应的地图 plot(italia["COD_PROV"], main = "意大利省份编码选区地图")
额外技巧:只绘制纯边界(不按属性着色)
如果只是想查看选区的几何边界,不需要按属性字段着色,可以提取sf对象的几何部分:
# 提取纯几何边界并绘制 plot(st_geometry(italia), main = "意大利选区边界图")
内容的提问来源于stack exchange,提问作者MCS
相关产品推荐
相关产品推荐

