0

我正在创建两张地图,一张带有等高线,另一张是热图。我正在使用该geom_density2d功能来创建具有轮廓线的功能,并stat_density2d创建热图。

请注意,geom_density2d它似乎没有与 相同的参数geom_density,它现在包含一个bw用于指定带宽的参数。

我知道(经过大量搜索)这两个函数都默认使用“Silverman 的经验法则”bw.nrd0来计算带宽,如本文所述。但是,我想更改带宽计算以使用 Sheather 和 Jones 方法,bw = "SJ"但不知道如何执行此操作,因为 ggplot2 不接受此参数(geom 和 stat 函数都不接受)。

此处提供了示例数据。

我用来创建等高线图的代码如下:

# Create the contour map with geom_density2d:
contourmap <- ggplot2::ggplot() + 
  geom_sf(data = phecll, 
          colour = "black", 
          fill = "#004529",
          alpha = 0.5,
          size = 0.75) +
  coord_sf() + 
  geom_density2d(data = rdmdata, 
                 mapping = aes(x = home_long, 
                               y = home_lat, 
                               alpha = 0.5),
                 inherit.aes = FALSE, 
                 contour_var = "density")

对于热图:

# Create the heatmap with stat_density2d:
heatmap <- ggplot2::ggplot() + 
  geom_sf(data = phecll, 
          colour = "black", 
          fill = "#004529",
          alpha = 0.5,
          size = 0.75) +
  coord_sf() + 
  stat_density2d(data = rdmdata, 
                 mapping = aes(x = home_long, 
                               y = home_lat, 
                               fill = ..level.., 
                               alpha = ..level..), 
                 size = 0.01,  
                 bins = 50,
                 geom = "polygon", 
                 inherit.aes = FALSE) + 
  scale_fill_gradient(low = "blue", 
                      high = "red", 
                      guide = "none") + 
  scale_alpha(range = c(0, 0.5),
              guide = "none")

如何将带宽计算从更改nrd0sj

4

0 回答 0