基于德国邮政编码着色地图并添加联邦州边界的实现问题
问题原因分析
错误Error in col2rgb(col, alpha = TRUE) : ungültiger Farbname in 'bundesland'的核心原因是:tm_borders()的col参数要求传入颜色值(比如"black"、"#FF0000"),但你传入了字段名"bundesland",R会将其识别为颜色名称,而不存在名为bundesland的颜色,因此报错。
你真正的需求是叠加联邦州边界,而非用bundesland字段控制边界颜色,需要调整代码逻辑。
修正步骤及代码
1. 获取联邦州边界数据
你已经加载了spData包,可直接使用内置的德国联邦州边界数据集de_states;如果有自定义的联邦州shp文件,也可以用read_sf()读取。
# 加载spData内置的德国联邦州边界数据 de_states <- spData::de_states
2. 统一坐标系(可选但推荐)
确保邮编数据与联邦州数据的坐标系一致,避免绘图错位:
# 将联邦州数据转换为与邮编数据相同的坐标系 de_states <- st_transform(de_states, crs = st_crs(germany))
3. 绘制叠加边界的地图
通过tm_shape()分别加载邮编数据和联邦州数据,先画邮编填充层,再叠加联邦州边界层:
tm_shape(germany) + tm_fill(col = "plz_groups") + # 邮编分组着色 tm_shape(de_states) + # 加载联邦州边界数据 tm_borders(col = "black", lwd = 1.5) # 设置边界颜色和宽度
自定义联邦州数据的情况
如果使用自己的联邦州shp文件,替换第一步为:
# 读取自定义联邦州shp文件 de_states <- read_sf("path/to/your/bundesland.shp")
内容的提问来源于stack exchange,提问作者ulima2_
相关产品推荐
相关产品推荐

