Sử dụng R: Làm việc với Dữ liệu không gian địa lý (và ggplot2)


Võ Thục Quyên
5 năm trước
Hữu ích 4 Chia sẻ Viết bình luận 0
Đã xem 4152

Bài viết này ban đầu được viết bởi Bethany Yollin tại blog Work With Data.

Đây là một bài đăng trên blog tiếp theo cho một bài viết giới thiệu trước đó của Steven Brey:  Sử dụng R: Làm việc với Dữ liệu không gian địa lý . Trong bài đăng này, chúng ta sẽ tìm hiểu cách vẽ biểu đồ dữ liệu không gian địa lý ggplot2. Tại sao chúng ta có thể muốn làm điều này? Vâng, đó thực sự là về sở thích cá nhân của bạn. Một số người sẵn sàng từ bỏ quyền kiểm soát baseđồ họa tinh xảo để đổi lấy sự thanh lịch của một ggplot. Sự lựa chọn hoàn toàn là của bạn.

Để bắt đầu, chúng tôi sẽ cần ggplot2gói và một số dữ liệu! Bộ dữ liệu chúng tôi sẽ xem xét là các shapefiles xác định lưu vực sông ở tiểu bang Washington.

LƯU Ý: Kiểm tra trang dữ liệu của Bộ Sinh thái học   nếu có bất kỳ liên kết nào không khả dụng.

Đang tải thư viện và dữ liệu


# load libraries
library(ggplot2)
library(sp)
library(rgdal)
library(rgeos)

# create a local directory for the data
localDir <- "R_GIS_data"
if (!file.exists(localDir)) {
  dir.create(localDir)
}

# download and unzip the data
url <- "ftp://www.ecy.wa.gov/gis_a/inlandWaters/wria.zip"
file <- paste(localDir, basename(url), sep='/')
if (!file.exists(file)) {
  download.file(url, file)
  unzip(file,exdir=localDir)
}

# create a layer name for the shapefiles (text before file extension)
layerName <- "WRIA_poly"

# read data into a SpatialPolygonsDataFrame object
dataProjected <- readOGR(dsn=localDir, layer=layerName)

Chuyển đổi dữ liệu

Cho đến nay, chúng tôi chưa làm bất cứ điều gì khác biệt hoàn toàn so với trước đây, nhưng để chuẩn bị dữ liệu cho âm mưu trong một ggplot, chúng tôi sẽ phải thực hiện một vài thao tác đối với cấu trúc dữ liệu. ggplot2sẽ chỉ làm việc với một data.frameđối tượng, vì vậy đối tượng của lớp chúng ta SpatialPolygonsDataFramesẽ không thích hợp cho âm mưu. Chúng ta hãy viết một số mã và thảo luận tại sao loại chuyển đổi này là cần thiết.

# add to data a new column termed "id" composed of the rownames of data
dataProjected@data$id <- rownames(dataProjected@data)

# create a data.frame from our spatial object
watershedPoints <- fortify(dataProjected, region = "id")

# merge the "fortified" data with the data from our spatial object
watershedDF <- merge(watershedPoints, dataProjected@data, by = "id")

# NOTE : If we so choose, we could have loaded the plyr library to use the
#      : join() function. For those familiar with SQL, this may be a more
#      : intuitive way to understand the merging of two data.frames. An
#      : equivalent SQL statement might look something like this:
#      : SELECT *
#      : FROM dataProjected@data
#      : INNER JOIN watershedPoints
#      : ON dataProjected@data$id = watershedPoints$id

# library(plyr)
# watershedDF <- join(watershedPoints, dataProjected@data, by = "id")

Tất cả các mã này có ý nghĩa gì và tại sao chúng ta cần nó? Chúng ta hãy đi qua dòng này theo dòng.

dataProjected@data$id <- rownames(dataProjected@data)

Ở đây chúng tôi đang nối thêm vào dữ liệu một cột phụ có tên là Id id. Cột này sẽ chứa các tên gọi để chúng tôi xác định mối quan hệ rõ ràng giữa dữ liệu và đa giác được liên kết với dữ liệu đó.

watershedPoints <- fortify(dataProjected, region = "id")

Củng cố? Điều đó có nghĩa là gì? Một tìm kiếm nhanh trên internet sẽ mang lại một số tài liệu hữu ích. (Xem tài liệu fortify.sp ). Về cơ bản, fortifylấy hai đối số : model, sẽ bao gồm SpatialPolygonsDataFrameđối tượng chúng ta muốn chuyển đổi và region, tên của biến để phân chia các vùng. Nếu tất cả diễn ra theo đúng kế hoạch, một số phép thuật sẽ xảy ra và chúng tôi nhận được một data.frame, giống như chúng tôi muốn rất tốt, không hoàn toàn. Nếu bạn kiểm tra điều này data.frame, bạn sẽ thấy nó dường như thiếu một số thông tin quan trọng. Không boăn khoăn! Sử dụng mối quan hệ chúng ta đã tạo trước đó, chúng ta có thể hợp nhất hai bộ dữ liệu này với lệnh sau.

watershedDF <- merge(watershedPoints, dataProjected@data, by = "id")

Và viola! Bây giờ chúng ta đã tạo một data.frameggplot2thích, chúng ta có thể bắt đầu âm mưu. Trước khi chúng ta bắt đầu âm mưu, hãy xem nhanh cái mới data.framemà chúng ta đã tạo.

head(watershedDF)
##   id    long     lat order  hole piece group WRIA_ID WRIA_NR WRIA_AREA_
## 1  0 2377934 1352106     1 FALSE     1   0.1       1      62     789790
## 2  0 2378018 1352109     2 FALSE     1   0.1       1      62     789790
## 3  0 2382417 1352265     3 FALSE     1   0.1       1      62     789790
## 4  0 2387199 1352434     4 FALSE     1   0.1       1      62     789790
## 5  0 2387693 1352452     5 FALSE     1   0.1       1      62     789790
## 6  0 2392524 1352623     6 FALSE     1   0.1       1      62     789790
##        WRIA_NM Shape_Leng Shape_Area
## 1 Pend Oreille     983140   3.44e+10
## 2 Pend Oreille     983140   3.44e+10
## 3 Pend Oreille     983140   3.44e+10
## 4 Pend Oreille     983140   3.44e+10
## 5 Pend Oreille     983140   3.44e+10
## 6 Pend Oreille     983140   3.44e+10

Ggplot đầu tiên của bạn

Nếu bạn đến từ baseđồ họa, một số cú pháp có thể xuất hiện đáng sợ, nhưng đó là tất cả các phần của ngữ pháp của đồ họa, sau đó ggplot2được mô hình hóa. Bạn sẽ nhận thấy một biểu đồ được xây dựng từng lớp, bắt đầu bằng dữ liệu và ánh xạ dữ liệu tới các thuộc tính thẩm mỹ của thành phố. Chúng tôi sẽ thêm các địa lý của Nhật Bản và các đối tượng hình học và có lẽ chúng tôi sẽ tính toán một số thống kê. Chúng tôi cũng có thể muốn điều chỉnh quy mô hoặc hệ thống tọa độ. Tất cả điều này có thể được thêm vào một cách rất mô-đun; đây là một trong những lợi thế quan trọng để sử dụng ggplot2. Vì vậy, nói đủ, hãy tạo ra một âm mưu!

Tiếp tục đọc ở đây.

 


Hữu ích 4 Chia sẻ Viết bình luận 0
Đã xem 4152