我想使用ggplot2在投影地图上绘制一些插值数据,我已经为此问题工作了几周。希望有人能帮助我,非常感谢。形状文件和数据可以在https://www.dropbox.com/s/8wfgf8207dbh79r/gpr_000b11a_e.zip?dl=0和https://www.dropbox.com/s/9czvb35vsyf3t28/Mydata.rdata?dl=0找到。
首先,该形状文件最初使用的是“经度-纬度”投影,我需要将其转换为等面积阿尔伯斯投影(aea)。
然后我们可以看到插值数据地图。
最后我想将这两个图形结合起来,但是出现了以下错误:
我的问题是:如何在地图上绘制插值数据,然后添加网格线(经度和纬度)。另外,我想知道如何剪裁插值数据地图以适应整个加拿大地图。感谢您的帮助。
首先,该形状文件最初使用的是“经度-纬度”投影,我需要将其转换为等面积阿尔伯斯投影(aea)。
library(automap)
library(ggplot2)
library(rgdal)
load("Mydata.rdata",.GlobalEnv)
canada2<-readOGR("gpr_000b11a_e.shp", layer="gpr_000b11a_e")
g <- spTransform(canada2, CRS("+proj=aea +lat_1=50 +lat_2=70 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +datum=NAD83 +units=m +no_defs +ellps=GRS80 +towgs84=0,0,0"))
Borders=ggplot() +geom_polygon(data=g,aes(x=long,y=lat,group=group),fill='white',color = "black")
Borders
我们可以看到,我们可以正确地绘制国家。然后我想使用Kriging方法对数据进行插值,代码取自平滑ggplot2地图。coordinates(Mydata)<-~longitude+latitude
proj4string(Mydata)<-CRS("+proj=longlat +datum=NAD83")
sp_mydata<-spTransform(Mydata,CRS(proj4string(g)))
Krig=autoKrige(APPT~1,sp_mydata)
interp_data = as.data.frame(Krig$krige_output)
colnames(interp_data) = c("latitude","longitude","APPT_pred","APPT_var","APPT_stdev")
interp_data=interp_data[,1:3]
ggplot(data=interp_data, aes(x=longitude, y=latitude)) + geom_tile(aes(fill=APPT_pred),color=NA)
然后我们可以看到插值数据地图。
![在此输入图片描述](https://istack.dev59.com/fLfGg.webp)
Error: Don't know how to add o to a plot
。ggplot(data=interp_data, aes(x=longitude, y=latitude)) + geom_tile(aes(fill=APPT_pred),color=NA)+Borders
我的问题是:如何在地图上绘制插值数据,然后添加网格线(经度和纬度)。另外,我想知道如何剪裁插值数据地图以适应整个加拿大地图。感谢您的帮助。
interp_data
对象中的纬度和经度被颠倒了。 - lbusettggplot()
创建的对象相加,因此不会出现ggplot()+geom_x()+ggplot()+geom_y()
。你只能添加新的图层。 - Axeman