Tôi muốn vẽ đường biên giới quốc gia của Bắc Mỹ qua một hình ảnh raster mô tả một số biến và sau đó phủ các đường viền lên trên cốt truyện bằng R. Tôi đã thành công khi thực hiện điều này bằng cách sử dụng đồ họa và mạng cơ sở, nhưng có vẻ như quá trình vẽ đồ thị là quá chậm Tôi chưa làm điều này trong ggplot2, nhưng tôi nghi ngờ rằng nó sẽ tốt hơn về mặt tốc độ.
Tôi có dữ liệu trong tệp netcdf được tạo từ tệp grib. Hiện tại, tôi đã tải xuống biên giới quốc gia cho Canada, Hoa Kỳ và Mexico, có sẵn trong các tệp RData từ GADM đọc thành R dưới dạng đối tượng SpatialPolygonsDataFrame.
Đây là một số mã:
# Load packages
library(raster)
#library(ncdf) # If you cannot install ncdf4
library(ncdf4)
# Read in the file, get the 13th layer
# fn <- 'path_to_file'
r <- raster(fn, band=13)
# Set the projection and extent
p4 <- "+proj=lcc +lat_1=50.0 +lat_2=50.0 +units=km +x_0=32.46341 +y_0=32.46341 +lon_0=-107 +lat_0=1.0"
projection(r) <- CRS(p4)
extent(r) <- c(-5648.71, 5680.72, 1481.40, 10430.62)
# Get the country borders
# This will download the RData files to your working directory
can<-getData('GADM', country="CAN", level=1)
usa<-getData('GADM', country="USA", level=1)
mex<-getData('GADM', country="MEX", level=1)
# Project to model grid
can_p <- spTransform(can, CRS(p4))
usa_p <- spTransform(usa, CRS(p4))
mex_p <- spTransform(mex, CRS(p4))
### USING BASE GRAPHICS
par(mar=c(0,0,0,0))
# Plot the raster
bins <- 100
plot(r, axes=FALSE, box=FALSE, legend=FALSE,
col=rev( rainbow(bins,start=0,end=1) ),
breaks=seq(4500,6000,length.out=bins))
plot(r, legend.only=TRUE, col=rev( rainbow(bins,start=0,end=1)),
legend.width=0.5, legend.shrink=0.75,
breaks=seq(4500,6000,length.out=bins),
axis.args=list(at=seq(4500,6000,length.out=11),
labels=seq(4500,6000,length.out=11),
cex.axis=0.5),
legend.args=list(text='Height (m)', side=4, font=2,
line=2, cex=0.8))
# Plot the borders
# These are so slow!!
plot(can_p, add=TRUE, border='white', lwd=2)
plot(usa_p, add=TRUE, border='white', lwd=2)
plot(mex_p, add=TRUE, border='white', lwd=2)
# Add the contours
contour(r, add=TRUE, nlevel=5)
### USING LATTICE
library(rasterVis)
# Some settings for our themes
myTheme <- RdBuTheme()
myTheme$axis.line$col<-"transparent"
myTheme$add.line$alpha <- 1
myTheme2 <- myTheme
myTheme2$regions$col <- 'transparent'
myTheme2$add.text$cex <- 0.7
myTheme2$add.line$lwd <- 1
myTheme2$add.line$alpha <- 0.8
# Get JUST the contour lines
contours <- contourplot(r, margin=FALSE, scales=list(draw=FALSE),
par.settings=myTheme2, pretty=TRUE, key=NULL, cuts=5,
labels=TRUE)
# Plot the colour
levels <- levelplot(r, contour=FALSE, margin=FALSE, scales=list(draw=FALSE),
par.settings = myTheme, cuts=100)
# Plot!
levels +
layer(sp.polygons(can_p, col='green', lwd=2)) +
layer(sp.polygons(usa_p, col='green', lwd=2)) +
layer(sp.polygons(mex_p, col='green', lwd=2)) +
contours
Có cách nào để tăng tốc độ âm mưu của đa giác không? Trên hệ thống mà tôi đang làm việc, âm mưu mất vài phút. Cuối cùng tôi muốn tạo ra một chức năng sẽ dễ dàng tạo ra một số các ô này để kiểm tra và tôi cho rằng tôi sẽ vẽ nhiều bản đồ này, vì vậy tôi muốn tăng tốc độ của các ô!
Cảm ơn!