首页 > 解决方案 > ggplot gridded SpatialPolygonsDataFrame 根据点数据生成奇数三角形和子集数据

问题描述

使用下面的代码,我可以绘制以下内容:此代码改编自此处

在此处输入图像描述

如您所见,该情节几乎没有问题。我正在努力

  1. 删除情节中的奇怪线条
  2. 仅绘制有数据的单元格(网格)
  3. gridSpatialPolygons$values在网格单元顶部绘制 ID(请参阅)

我意识到这个问题有几点,但我希望一个解决方案可以解决所有问题。

# Load libraries
library(sp)
library(raster)
library(ggplot2)

# Projection
wgs.84 <- CRS("+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0")

# Load data
x <- c(76.82973, 76.82972, 76.82969, 76.83076, 76.83075, 76.83071, 76.83129, 76.83126, 76.83125) 
y <- c(28.26734, 28.26644, 28.26508, 28.26778, 28.26733, 28.26507, 28.26912, 28.26732, 28.26687) 
z <- c(-56.7879, -58.22462, -58.4211, -55.75333, -58.55153, -56.38619, -56.11011, -58.17415, -59.77212)

# Create data frame
dataset <- data.frame("LONGITUDE" = x, "LATITUDE" = y, "VALUES" = z)

# Create SpatialPointsDataFrame object  
datasetSP <- SpatialPointsDataFrame(coords = dataset[,c(1,2)], data = data.frame("id" = 1:nrow(dataset), "values" = dataset$VALUES), proj4string = wgs.84)

# Extent
extentDatasetSP <-extent(datasetSP)

# Make grid options

# Cell size (map units)
xCellSizeGrid <- 0.001
yCellSizeGrid <- 0.001

# Grid
grid <- GridTopology(cellcentre.offset = c(extentDatasetSP@xmin, extentDatasetSP@ymin),
                     cellsize = c(xCellSizeGrid, yCellSizeGrid), 
                     cells.dim = c(3, 7))

# Create SpatialGrid object
gridSpatial <- SpatialGrid(grid = grid, proj4string = wgs.84)


# Convert to SpatialPixels object
gridSpatialPixels <- as(gridSpatial, "SpatialPixels")

# Convert to SpatialPolygons object
gridSpatialPolygons <- as(gridSpatialPixels, "SpatialPolygons")

# Add 'id' and 'values' to every polygon
gridSpatialPolygons$id <- 1:nrow(coordinates(gridSpatialPolygons))
gridSpatialPolygons$values <- paste("Gridvalue", 1:nrow(coordinates(gridSpatialPolygons)), sep = ":")

# Get attributes from polygons 
samplePointsInPolygons2 <- datasetSP %over% gridSpatialPolygons

ggplot(gridSpatialPolygons, aes(x = long, y = lat)) + 
  geom_polygon(color = "red") +
  geom_point(data = dataset,
             aes(x = LONGITUDE,
                 y = LATITUDE))

标签: rggplot2gisrastersp

解决方案


当涉及到空间对象时,ggplot2(以及一般的 tidyverse)似乎sfsp. 以下建议取自相关broom软件包中的帮助文件之一:

请注意,该sf包现在定义了整洁的空间对象,并且是推荐的空间数据方法。sptidiers 很可能在不久的将来被弃用,取而代之的是sf::st_as_sf(). sptidiers的开发已经停止broom

转换为sf.

library(dplyr)

sf::st_as_sf(gridSpatialPolygons) %>%
  filter(id %in% samplePointsInPolygons2$id) %>%       # keep only grid cells with data 
  ggplot() +
  geom_sf(colour = "red") +
  geom_sf_text(aes(label = values),                    # label cells 
               nudge_y = 0.0003, colour = "grey40") +
  geom_point(data = dataset,
             aes(x = LONGITUDE,
                 y = LATITUDE))

阴谋


推荐阅读