-->

绘制在地图上插数据绘制在地图上插数据(Plotting interpolated data on m

2019-05-13 10:54发布

我有采取了在切萨皮克湾,美国各个网站物种丰富度的调查数据,我想以图形方式显示数据为“热图”。

我有经度/纬度坐标和丰富性值,其余转换成的数据帧SpatialPointsDataFrame和所使用的autoKrige()从自动地图包功能,以产生经内插的值。

首先,任何人都可以作为我是否正确地实现评论autoKrige()函数?

其次,我无法绘制数据和覆盖地区地图的。 或者,我可以指定插值网格反映湾的边界(如建议在这里 )? 我如何可能做到这一点,在那里可以获取该信息的任何想法? 直供电网autoKrige()似乎很容易做到。


编辑:感谢保罗为他的超级有用的帖子! 这是我现在有。 遇到了麻烦ggplot同时接受内插数据和地图投影:

require(rgdal)
require(automap)
#Generate lat/long coordinates and richness data
set.seed(6)
df=data.frame(
  lat=sample(seq(36.9,39.3,by=0.01),100,rep=T),
  long=sample(seq(-76.5,-76,by=0.01),100,rep=T),
  fd=runif(10,0,10))
initial.df=df

#Convert dataframe into SpatialPointsDataFrame
coordinates(df)=~long+lat

#Project latlong coordinates onto an ellipse
proj4string(df)="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"
#+proj = the type of projection (lat/long)
#+ellps and +datum = the irregularity in the ellipse represented by planet earth

#Transform the projection into Euclidean distances
project_df=spTransform(df, CRS("+proj=merc +zone=18s +ellps=WGS84 +datum=WGS84")) #projInfo(type="proj")

#Perform the interpolation using kriging
kr=autoKrige(fd~1,project_df)
#Extract the output and convert to dataframe for easy plotting with ggplot2
kr.output=as.data.frame(kr$krige_output)
#Plot the output
#Load the map data for the Chesapeake Bay
cb=data.frame(map("state",xlim=range(initial.df$long),ylim=range(initial.df$lat),plot=F)[c("x","y")])

ggplot()+
  geom_tile(data=kr.output,aes(x=x1,y=x2,fill=var1.pred))+  
  geom_path(data=cb,aes(x=x,y=y))+
  coord_map(projection="mercator")

Answer 1:

我有一些关于你的帖子的言论:

使用克里格

我看到你正在使用统计学来构建你的热图。 您还可以考虑(在包装领域如薄板样)其他插值技术,例如花键。 这使得有关数据(例如平稳)少的假设,也可以想像你的数据就好了。 在假设在你把它发送到日记情况下可能有助于数量的减少,那么你必须少解释评审。 如果你愿意,也可以比较几个插值技术,看到一个报告,我写了一些技巧。

数据投影仪

我看到你正在使用经纬度座标等的克里格。 Edzer Pebesma(作者gstat ) 指出,没有变差函数模型,适用于纬度经度坐标。 这是因为在纬度经度的距离不是直的(即欧几里得 ),但在一个球体,(即大圆距离 )。 有迹象表明,有效期为球面坐标没有协方差函数(或变差函数模型)。 我建议使用投影他们spTransformrgdal使用自动映射前,包。

所述rgdal包使用proj4投影库来执行计算。 项目数据,你首先需要定义它的投影:

proj4string(df) = "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"

上述上表达的右手侧的proj4字符串定义投影的类型( +proj ),已使用的椭圆。( +ellps )和基准( +datum )。 要了解这些术语的含义,你可以想像地球作为一个土豆。 地球不是完美的球形,这是由椭圆。定义。 无论是地球椭球体的完美,但表面更加不规则。 这种不规则由基准定义。 另请参见这篇文章在维基百科上 。

一旦你的投影定义,你可以使用spTransform

project_df = spTransform(df, CRS("+proj= etcetc"))

其中CRS(“+ PROJ等”)定义了目标投影。 其投影合适取决于你的地理位置和研究区域的大小。

与绘图GGPLOT2

对于加入多边形或折线来ggplot,请给看的文档coord_map 。 这包括使用的示例maps包绘制国家边界。 如果需要,例如shape文件加载研究区域,你可以这样做使用rgdal 。 请记住, ggplot2与data.frame的,不适用SpatialPolygons 。 您可以将SpatialPolygonsdata.frame使用:

poly_df = fortify(poly_Spatial)

又见这个功能 ,我创建绘制空间网格。 它直接作用于SpatialGrids /像素。 请注意,您需要从库(源的一个或两个附加文件continuousToDiscrete )。

创建插值格

我创建了自动地图是没有指定时生成输出网格。 这是通过创建数据点周围的凸包,和采样里面5000点来完成。 该预测区域的边界,和在它(以及因此的分辨率)采样的点的数目是相当武断的。 用于特定应用的预测区域的形状可以从一个多边形中导出,使用spsample采样多边形内部的点。 多少分来样,因而分辨率,取决于两件事情:

  • 该类型的数据你,举例来说,如果你的数据是非常流畅,没有在与此相比平滑真的很高提高分辨率多点。 另外,如果你的数据有很多小规模strcutures,你需要高分辨率。 ofcourse如果你有意见支持这个分辨率高,这是唯一可行的。
  • 数据的密度。 如果你的数据会变得更加密集,可以提高分辨率。

如果您使用插值地图后续分析,得到了分辨率权是很重要的。 如果您使用地图纯粹是为了visuatlisation目的,这是不那么重要。 但是请注意,在这两种情况下,过高的分辨率可以误导你预测的准确性,而过低的分辨率不公平对待的数据。



文章来源: Plotting interpolated data on map