使用tmap为CSV中各点位分配独立自定义图标失败的技术咨询
解决tmap中为每个点位分配独立图标的问题
问题根源
原代码核心问题有两个:一是循环中仅保留了最后一次迭代的图标变量,导致所有点位共用同一个图标;二是错误尝试将图标对象存入sf列,这并非tmap的正确用法。
修正后的代码
1. 读取并转换数据
points <- read.csv("dane_ikony.csv", header = TRUE) points.sf <- st_as_sf(points, coords = c("x", "y"), crs = 4326)
2. 批量生成图标向量
直接用tmap_icons处理CSV中所有图标路径,生成对应每个点位的图标向量:
point_icons <- tmap_icons(points$Icon)
3. 静态地图代码
tm_shape(pl.map.sf) + tm_polygons(col = "lightyellow1") + tm_shape(points.sf) + tm_symbols(shape = point_icons, size = 1.2, border.lwd = NA) + tm_grid(col = "gray", labels.size = 0.8) + tm_text("Nazwa", size = 0.8, root = F, just = 'top', auto.placement = T) + tm_layout(title = "mapa Polski", legend.text.size = 0.8, legend.title.size = 0.8, frame = TRUE) + tm_scale_bar(position = c("left", "bottom"))
4. 交互式地图代码
tmap_mode("view") tm_shape(pl.map.sf) + tm_polygons(col = "lightyellow1") + tm_shape(points.sf) + tm_text("Nazwa", size = 0.8, root = F, just = 'top', auto.placement = T) + tm_symbols(shape = point_icons, size = 1.2, border.lwd = NA) + tm_view(alpha = 0.5)
注意事项
- 确保CSV中指定的图标文件(如
krakow.png、wroclaw.png)位于当前R工作目录下,或使用完整文件路径。
内容的提问来源于stack exchange,提问作者BobPixel
相关产品推荐
相关产品推荐

