在地图上绘制插值数据

2024-03-29

我有在美国切萨皮克湾不同地点采集的物种丰富度调查数据,我想以图形方式将这些数据呈现为“热图”。

我有一个纬度/经度坐标和丰富度值的数据框,我将其转换为SpatialPointsDataFrame并使用了autoKrige()automap 包中的函数用于生成插值。

首先,任何人都可以评论我是否正确实施了autoKrige()功能?

其次,我在绘制数据和覆盖该地区的地图时遇到困难。或者,我可以指定插值网格来反映海湾的边界(如建议的那样)here https://stackoverflow.com/questions/8563334/average-values-of-a-point-dataset-to-a-grid-dataset)?关于如何做到这一点以及从哪里可以获得这些信息有什么想法吗?向电网供电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")

我对你的帖子有几点评论:

使用克里格法

我看到您正在使用地统计学来构建热图。您还可以考虑其他插值技术,例如样条线(例如 fields 包中的薄板样条线)。这些对数据的假设(例如平稳性)较少,并且还可以很好地可视化您的数据。如果您将其发送给期刊,则假设数量的减少可能会有所帮助,这样您就无需向审稿人解释。如果需要,您还可以比较一些插值技术,请参阅我写的一份报告 http://www.numbertheory.nl/files/report_evap.pdf一些提示。

数据投影

我发现您正在使用经纬度坐标进行克里格法。埃德泽·佩贝斯玛(Edzer Pebesma)(作者gstat) 指出 http://r-sig-geo.2731867.n2.nabble.com/Great-Circle-distances-in-Automap-Gstat-td6863940.html没有适合经纬度坐标的变异函数模型。这是因为在经纬度中,距离不是直的(即欧几里得 http://en.wikipedia.org/wiki/Euclidean_distance),但是在一个球体上,(即大圆距离 http://en.wikipedia.org/wiki/Great-circle_distance)。没有对球坐标有效的协方差函数(或变差函数模型)。我建议使用投影它们spTransform来自rgdal使用 automap 之前先打包。

rgdal 包使用proj4 投影库 http://trac.osgeo.org/proj/执行计算。要投影数据,您首先需要定义其投影:

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

上面表达式右侧的 proj4 字符串定义了投影的类型 (+proj),使用的椭圆(+ellps)和数据(+datum)。要理解这些术语的含义,您必须将地球想象成一个土豆。地球不是完美的球形,这是由椭圆定义的。地球也不是一个完美的椭球体,但其表面更加不规则。这种不规则性是由数据定义的。也可以看看维基百科上的这篇文章 http://en.wikipedia.org/wiki/Map_projection.

定义投影后,您可以使用spTransform:

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

其中 CRS("+proj etc") 定义目标投影。哪种投影合适取决于您的地理位置和研究区域的大小。

使用 ggplot2 绘图

要向 ggplot 添加多边形或多段线,请查看以下文档coord_map。这包括使用的示例maps绘制国家边界的包。如果您需要为您的研究区域加载例如形状文件,您可以使用rgdal。请记住这一点ggplot2适用于 data.frame,不适用于SpatialPolygons。你可以转变SpatialPolygons to data.frame using:

poly_df = fortify(poly_Spatial)

也可以看看这个功能 https://bitbucket.org/paulhiemstra/paultools/src/ac65b18511f0/plotSpatialGrids.r我创建是为了绘制空间网格。它直接在 SpatialGrids/Pixels 上工作。请注意,您需要从该存储库中获取一两个附加文件(连续到离散 https://bitbucket.org/paulhiemstra/paultools/src/ac65b18511f0/continuousToDiscrete.r).

创建插值网格

当没有指定时,我创建了 automap 来生成输出网格。这是通过在数据点周围创建凸包并在其中采样 5000 个点来完成的。预测区域的边界以及其中采样的点数(以及分辨率)是相当任意的。对于特定应用,预测区域的形状可以从多边形导出,使用spsample对多边形内的点进行采样。采样多少个点以及分辨率取决于两件事:

  • 例如,如果您的数据非常平滑,那么与这种平滑度相比,将分辨率提高得非常高就没有多大意义。或者,如果您的数据具有许多小规模结构,则需要高分辨率。当然,只有当您有支持这种高分辨率的观察结果时,这才有可能。
  • 数据的密度。如果您的数据更密集,您可以提高分辨率。

如果您使用插值图进行后续分析,获得正确的分辨率非常重要。如果您纯粹将地​​图用于可视化目的,那么这一点就不那么重要了。但请注意,在这两种情况下,太高的分辨率可能会误导预测的准确性,而太低的分辨率则无法公正地对待数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在地图上绘制插值数据 的相关文章

  • 从 data.frame 创建新列

    我有一个长格式的数据集 其中测量 时间 嵌套在 Networkpartners NP 中 而 Networkpartners NP 又嵌套在人员 ID 中 下面是它的示例 真实数据集有数千行 ID NP Time Outcome 1 11
  • 使用 gbuffer 在 R 中缓冲(地理)空间点

    我正在尝试缓冲数据集中半径为 100 公里的点 我正在使用该功能gBuffer从包装中rgeos 这是我到目前为止所拥有的 head sampledf postalcode lat lon city province 1 A0A0A0 47
  • 为 RStudio Server 1.0.44 配置日志目录

    我在 CentOS 7 上运行 RStudio Server 1 0 44 根据文档 https support rstudio com hc en us articles 200554766 RStudio Server Applicat
  • 网页抓取(R 语言?)

    我想获取中间栏中的公司名称this http www consumercomplaints in bysubcategory mobile service providers page 1 html页面 以蓝色粗体书写 以及登记投诉者的位置
  • 在R中绘制3x3方形网格

    我得到了一个数字列表 n 9 想将它们画在一个 3 3 的正方形网格中 每个网格填充相应的数字 我如何在 R 中执行此操作而不安装额外的软件包 例如情节 非常感谢 这里有一个ggplot解决方案比我预期的要难一点 Setup the dat
  • 如何在ggplot2中使用希腊符号?

    我的类别需要用希腊字母命名 我在用ggplot2 并且它与数据配合得很好 不幸的是 我无法弄清楚如何将这些希腊符号放在 x 轴上 在刻度线处 并使它们出现在图例中 有什么办法可以做到吗 更新 我看了一下link https github c
  • R:邻接表到邻接矩阵

    Bonjour 我想将邻接列表 3 列 转换为邻接矩阵 在这个论坛中 我找到了多个有关如何将边列表转换为邻接矩阵的示例 我成功地为两列列表做到了这一点 我已经尝试了在网上可以找到的所有解决方案 但似乎我错过了一小步 我尝试过的 我的变量是用
  • 如何更改 Quarto pptx 中的字体格式

    我正在 R 中使用 Quarto 创建 pptx 要更改我尝试更改的默认字体格式mainfont范围 但是当我渲染它时 最终的 pptx 文件具有默认字体 Calibri 这是我的文件 YAML 将 Quarto 文件渲染为 pptx 时如
  • (R 错误)错误:cons 内存耗尽(达到限制?)

    我正在处理大数据 并且有一个 70GB 的 JSON 文件 我正在使用 jsonlite 库将文件加载到内存中 我尝试过 AWS EC2 x1 16large 机器 976 GB RAM 来执行此负载 但 R 因错误而中断 Error co
  • 自动将变量名称添加到列表的元素[重复]

    这个问题在这里已经有答案了 我有一个模型列表 为了使代码更易于维护 因此可以方便地添加和删除模型 我希望有一个地方来存储它们及其名称 为此 我必须解决以下命名问题 上游 我生成模型的方式比以下方式效率低 如果是这样压缩的 我会assign他
  • 为格子中的每个面板添加不同的独特标签

    很清楚如何在格子中标记面板 https stackoverflow com questions 8508269 how to label panels in lattice using panel text or ltext论据 但是 如果
  • R 中使用 randomForest 进行内存高效预测

    TL DR我想知道使用基于大型数据集 数百个特征 数十万行 构建的随机森林模型执行批量预测的内存有效方法 Details 我正在处理一个大型数据集 内存中超过 3GB 并且想要使用以下方法进行简单的二进制分类randomForest 由于我
  • 当添加列较少时追加到现有 SQLite 表,而不将数据库读入 R

    是否有一些简单的方法 无论是在 SQL 端还是在 R 端 将 data frame 附加到具有更多列的现有表 缺失的列应该用 NA 填充 如果它能够优雅地处理比表 1 列数更多的表 2 那么会加分吗 library RSQLite Crea
  • 计算数据框中每一行的 R 条件运行总和

    我想创建一个等于 data Rating 的运行总和的列 假设第 3 列和第 4 列中有两个条件成立 特别是 data Year 换句话说 这应该计算直到上一年为止每个 id 的评分累积总和 它应该对数据框中的每一行 大约 50 000 行
  • svyby比例的置信区间

    是否存在创建置信区间的现有函数 从一个svyby比例对象 在我的例子中 是一个二进制项目的交叉表survey包裹 我经常比较各组之间的比例 如果有一个可以提取置信区间的函数 使用调查函数svyciprop而不是confint 下面的示例显示
  • 如何缩放(标准化)每列内的 ggplot2 stat_bin2d 值(按 X 轴)

    我有一个 ggplot stat bin2d 热图 library ggplot2 value lt rep 1 5 1000 df lt as data frame value df group lt rep 1 7 len 5000 d
  • dplyr 总结小计

    Excel 中数据透视表的一大优点是它们会自动提供小计 首先 我想知道 dplyr 中是否已经创建了任何可以实现此目的的东西 如果没有 实现它的最简单方法是什么 在下面的示例中 我按气缸和化油器的数量显示了平均排量 对于每组气缸 4 6 8
  • 如何在r中进行左连接[重复]

    这个问题在这里已经有答案了 我有两个数据集一和二 数据集一 a b c 111 a 1 112 b 2 113 c 3 114 d 4 115 e 5 数据集二 e d g 222 ss 11 111 ff 22 113 ww 33 114
  • R 编程中的字符串分割

    目前 下面的脚本将组合的项目代码拆分为特定的项目代码 rule2 lt c MR df 1 lt test grep paste rule2 sep collapse test Name y SpaceName 1 lt function
  • 使用 lpSolve 优化 R 团队名单

    我是 R 新手 有一个想要解决的特定幻想运动队优化问题 我见过其他帖子使用 lpSolve 来解决类似的问题 但我似乎无法理解代码 下面的示例数据表 每个球员都在一个球队中 扮演着特定的角色 有薪水 并且每场比赛都有平均得分 我需要的限制是

随机推荐

  • Jackson JSON、不可变类和接口

    我正在使用 Jackson 的示例 并且在反序列化与不可变的类和接口一起使用时遇到了一些麻烦 下面是我的代码 package com art starter jackson starter import java io IOExceptio
  • 为什么在 Resharper/MSTest 下调试时引用的 dll 被锁定?

    我对汇编中的方法进行了集成测试A 集会A参考汇编B通过项目参考 我在 Resharper 6 1 单元测试场景中的 Visual Studio 2010 调试器下运行它们 测试引擎是微软原生的MSTest 我得到了臭名昭著的 该进程无法访问
  • 如何捕获 TimeConstrained 产生的中断?

    数学有CheckAbort允许捕获和处理用户生成的和编程的函数Aborts 但它不允许捕获由以下函数生成的中断TimeConstrained and MemoryConstrained TimeConstrained CheckAbort
  • M2Crypto:验证 DSA 签名

    我在使用 Python M2Crypto 验证 DSA 签名时遇到问题 签名是在 Java 中使用标准 java security Signature 类以及 Sun 的加密提供程序和 SHA1withDSA 算法指定生成的 这是一些 sh
  • 使用 SqlCommand 返回值

    我正在尝试获取 SQL 2008 服务器上存储过程的结果集和返回值 当我在sql management studio中运行proc时 我得到结果集和返回值 但是 当我尝试获取 C 4 0 中的值时 参数的值为 null 这是我的 C 代码
  • 通过 Grails 域标准在活动光标中出现 Mongo CursorNotFound 异常

    我正在使用 Grails 2 4 4 mongo 插件 3 0 2 MongoDB 2 4 10 使用远程数据库连接 grails mongo host 11 12 13 14 A remote server IP port 27017 d
  • 如何实现Flood-fill算法?

    我正在开发一个 Paint 应用程序 其中我正在实现类似于 MS Paint 应用程序的 BucketFill 功能 我使用一些 FloodFill 算法对其进行了编码 但填充颜色过程花费了太多时间 我不太确定其背后的原因可能是由于缓存内存
  • 标签文本中的 RGB 颜色效果,tkinter python

    您好 我只是在尝试一些代码 我正在尝试更改标签内文本的颜色 如物理键盘中的 rgb 颜色效果 使用以下代码我确实改变了颜色 但我正在尝试实现的目的是改变文本每个字母的颜色 但我不知道该怎么做 下面是我写的代码 import tkinter
  • 如何使用 WiX 将交互式用户添加到本地化 Windows 中的目录?

    如何添加瑞典语交互式用户 NT INSTANS INTERAKTIV 或英文交互用户 NT AUTHORITY INTERACTIVE 或任何其他本地化用户组write程序文件夹 ACL 的权限 这个问题实际上是 我如何使用安全对象 我无法
  • 在 AWS RDS 实例之间移动数据

    我需要在两个不同的 rds 实例上的相同 mysql 数据库之间移动数百万行 我想到的方法是这样的 use data pipeline to export data from the first instance to amazon s3
  • 在 R 中对非常大的数据集(180 万行 x 270 列)进行建模

    我正在研究一个视窗8操作系统带有8 GB 内存 我有一个数据框180 万行 x 270 列我必须对其执行glm logit 任何其他分类 我尝试使用 ff 和 bigglm 包来处理数据 但我仍然面临错误的问题 Error cannot a
  • 检查我的页面是否嵌入 iframe 中

    我想测试我的页面 php 是否嵌入到 iframe 中 以便实现不同的行为 知道如何测试这个 如果有帮助的话我也在使用 jQuery 添加 我特别感兴趣是否有一种方法可以在服务器上而不是在客户端使用 Javascript 来测试它 你可以使
  • “尚未应用待处理的组合物”例外是什么意思以及如何避免?

    我有一个正在运行的应用程序 但有时 由于我未知的原因 应用程序崩溃并显示以下消息 java lang IllegalStateException 尚未应用挂起的组合 我无法在任何地方找到有关此异常发生的信息 而且我也不明白如何避免它 编辑
  • Android - 从HashMap中获取值

    我尝试在 Android 中搜索 HashMap 但出现问题 考虑这个例子 HashMap
  • 将 Android GoogleSignIn 与 GmailScopes.GMAIL_SEND (gmail api) 结合使用

    我想使用 GoogleSignIn 并使用 android 内部电子邮件地址 gmail 发送电子邮件 GoogleSignInOptions gso new GoogleSignInOptions Builder GoogleSignIn
  • 更改搜索栏中的键盘颜色和外观

    当用户点击搜索文本字段时 我想将键盘的颜色更改为黑色 我试图通过以下方式实现它UITextField textField UITextField appearance textField setKeyboardAppearance UIKe
  • jenkins中访问文件参数

    我正在从事多配置工作 回归 L1 在 Jenkins 中 其任务是运行 2 种测试 测试1和测试2 在多配置作业中 它会触发执行器作业 回归执行器 运行所选测试的脚本 这回归 L1作业被限制运行矩阵服务工作节点 而矩阵作业将在从节点中运行自
  • Python Regex - 查找html标签之间的字符串[重复]

    这个问题在这里已经有答案了 我正在尝试提取 Html 标签之间的字符串 我可以看到以前在堆栈溢出上也有人问过类似的问题 但我对 python 完全陌生 而且我很挣扎 所以如果我有 b Bold Stuff b 我想要一个正则表达式让我 Bo
  • 当我尝试向我的 S3 存储桶 (Node.js) 发送内容时 AWS 缺少凭证

    我从昨天开始就遇到这个问题 一直找不到解决方案 我正在尝试将某些内容发送到我的 S3 存储桶 但是当我尝试时 此消息出现在我的控制台中 CredentialsError Missing credentials in config messa
  • 在地图上绘制插值数据

    我有在美国切萨皮克湾不同地点采集的物种丰富度调查数据 我想以图形方式将这些数据呈现为 热图 我有一个纬度 经度坐标和丰富度值的数据框 我将其转换为SpatialPointsDataFrame并使用了autoKrige automap 包中的