使用ggplot2绘制sf多边形:变量'test'为何为矩阵?
解决sf对象中矩阵类型变量的绘图问题
嘿,别担心,你遇到的情况其实很常见,不是操作错误——st_as_sf()在转换SpatialPolygonsDataFrame时,会原封不动保留原数据里的所有属性格式,包括矩阵类型的列。这类矩阵列通常是原空间数据里存储的多值属性,直接用在ggplot2的geom_sf()里肯定会出问题,因为它需要的是单值向量。
下面是具体的解决步骤:
1. 先确认矩阵的结构
先看看test矩阵到底有几列,方便后续处理:
str(wards$test)
2. 把矩阵转成可用的格式
根据矩阵的列数,有两种处理方式:
- 如果是单列矩阵:直接转成向量就好
wards$test <- as.vector(wards$test)
- 如果是多列矩阵:把每一列拆成单独的列,方便后续绘图时选择
# 示例:假设矩阵有2列,分别命名为test_1和test_2 wards$test_1 <- wards$test[, 1] wards$test_2 <- wards$test[, 2]
3. 正常绘制sf地图
处理完后,就可以用ggplot2正常绘图了,比如:
library(ggplot2) ggplot(wards) + geom_sf(aes(fill = test)) + # 用转换后的向量列 scale_fill_viridis_c() # 可选,添加好看的颜色映射
这样就能顺利绘制带填充的空间地图啦~
内容的提问来源于stack exchange,提问作者TheRealJimShady
相关产品推荐
相关产品推荐

