问题描述
我正在尝试创建一个 R 函数,该函数将对用户从空间多边形数据帧指定的变量运行 GWR。运行该函数的最终结果是两个映射 - 自变量值之一和来自 GWR 模型的系数值之一。第二张地图有问题。
我已经成功地为我要可视化的系数创建了 GWR 模型和“结果”对象。
gwr.model <- gwr(SpatialpolygonsDataFrame@data[,y] ~ SpatialpolygonsDataFrame@data[,x],data = SpatialpolygonsDataFrame,adapt = GWRbandwidth,hatmatrix = TRUE,se.fit = TRUE)
results <- as.data.frame(gwr.model$SDF)
gwr.map <- SpatialpolygonsDataFrame
gwr.map@data <- cbind(SpatialpolygonsDataFrame@data,as.matrix(results))
要创建 GWR 系数的可视化,我必须将 tm_fill()
指定为“results”对象中的一列,但我不知道如何操作,以便可以使用该函数任何空间多边形数据框。到目前为止,我已经尝试使用 paste0()
函数,如下所示:
map2 <- tm_shape(gwr.map) + tm_fill(paste0("SpatialpolygonsDataFrame.",x),n = 5,style = "quantile",title = "Coefficient") +
tm_layout(frame = FALSE,legend.text.size = 0.5,legend.title.size = 0.6)
但我收到一个错误,提示 fill 参数既不是颜色也不是有效的变量名。
解决方法
切换到包 sf
- 留下 sp
- 可能会在这里解决您的问题。
在没有可重现的示例的情况下,让我尝试在这里提出以下建议:
使用 gwr.map.sf <- sf::st_as_sf(gwr.map)
转换您的结果。然后将 GWR 的结果简单地添加为一个新列:gwr.map$results <- results
(我的理解是尺寸应该适合)。
最后你应该能够像这样绘制:
map2 <- tm_shape(gwr.map.sf) + tm_fill("results",n = 5,style = "quantile",title = "Coefficient") +
tm_layout(frame = FALSE,legend.text.size = 0.5,legend.title.size = 0.6)