如果我希望它是来自新对象的变量,如何指定 tm_fill()?

问题描述

我正在尝试创建一个 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)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...