在r中将地图叠加在3D曲面地图之上

2023-12-25

我使用 rgl.surface() 创建了一个 3d 地图,主要遵循 Shane 在中的回答this https://stackoverflow.com/questions/1896419/plotting-a-3d-surface-plot-with-contour-map-overlay-using-r邮政。使用我自己的数据,我得到了这张地图

在此表面地图的顶部,我想添加植被密度地图,以便我获得类似这样的东西(通过软件 Surfer 获得):

是否可以使用 rgl 来做到这一点,或者 r 中的任何其他包,或者是像 Shane 的答案那样拥有两个地图的唯一解决方案?

谢谢。

Edit:

根据@gsk3的请求,以下是该地图的代码:

library(rgl)

# Read the z (i.e. elevation) dimension from file
z1 = matrix(scan("myfile.txt"),nrow=256, ncol=256, byrow=TRUE)
#create / open x y (i.e. easting and northing coordinates) dimensions 
y=8*(1:ncol(z)) # Each point is 8 m^2
x=8*(1:nrow(z))

# See https://stackoverflow.com/questions/1896419/plotting-a-3d-surface-plot-with-contour-map-overlay-using-r for details of code below
zlim <- range(z)
zlen <- zlim[2] - zlim[1] + 1
colorlut <- terrain.colors(zlen,alpha=0) # height color lookup table
col <- colorlut[ z-zlim[1]+1 ] # assign colors to heights for each point
open3d()
rgl.surface(x,y,z)

我无法发布海拔代码,因为有 65536 个(即 x*y=256*256)点,但它是一个看起来像这样的矩阵

            [,1]     [,2]     [,3]     [,4]     [,5] 
[1,]    1513.708 1513.971 1514.067 1513.971 1513.875 
[2,]    1513.622 1513.524 1513.578 1513.577 1513.481

等等。 植被密度图也是如此,它的格式完全相同,并且每个 x*y 点都有一个值。我希望这能让事情变得更清楚......?

编辑2,最终版本

这是我用 R 制作的地图。我还没有在上面添加图例,但这是我稍后会做的事情。

最终的代码是

library(rgl)
z1 = matrix(scan("myfile.txt"),nrow=256, ncol=256, byrow=TRUE)
# Multiply z by 2 to accentuate the relief otherwise it looks a little bit flat.
z= z1*2

#create / open x y dimensions
y=8*(1:ncol(z))
x=8*(1:nrow(z))

trn = matrix(scan("myfile.txt"),nrow=256, ncol=256, byrow=TRUE)
fv = trn*100
trnlim = range(fv)

fv.colors = colorRampPalette(c("white","tan4","darkseagreen1","chartreuse4")) ## define the color ramp
colorlut =fv.colors(100)c(1,seq(35,35,length.out=9),seq(35,75,length.out=30),seq(75,100,length.out=61))] 

# Assign colors to fv for each point
col = colorlut[fv-trnlim[1]+1 ] 
open3d()
rgl.surface(x,y,z,color=col) 

非常感谢@gsk3 和@nullglobthis https://stackoverflow.com/questions/6981631/sharp-break-in-color-palette-in-r发帖寻求他们的帮助。希望这篇文章能帮助更多人!


修改上面的代码来给出答案。请注意,地形应该是与高程矩阵格式相同的矩阵。我添加了一个,color函数调用的参数,因此它实际上使用您创建的颜色矩阵。

library(rgl)

# Read the z (i.e. elevation) dimension from file
z1 = matrix(scan("myfile.txt"),nrow=256, ncol=256, byrow=TRUE)
#create / open x y (i.e. easting and northing coordinates) dimensions 
y=8*(1:ncol(z)) # Each point is 8 m^2
x=8*(1:nrow(z))

# Read the terrain types from a file
trn = matrix(scan("terrain.txt"),nrow=256, ncol=256, byrow=TRUE)

# See http://stackoverflow.com/questions/1896419/plotting-a-3d-surface-plot-with-contour-map-overlay-using-r for details of code below
trnlim <- range(trn)
trnlen <- trnlim[2] - trnlim[1] + 1
colorlut <- terrain.colors(trnlen,alpha=0) # height color lookup table
col <- colorlut[ trn-trnlim[1]+1 ] # assign colors to heights for each point
open3d()
rgl.surface(x,y,z,color=col)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在r中将地图叠加在3D曲面地图之上 的相关文章

  • gridExtra 2.0.0 更改标题大小

    我知道 gridExtra 已更新 因此 我想知道如何更改标题大小 这不再有效 grid arrange a b c d ncol 2 nrow 2 main textGrob Title gp gpar fontsize 15 font
  • 使用变量标签作为标题和轴标题时自动化 ggplots

    我对 NSE 和绘图函数有点混淆 我试图在使用变量标签 而不是名称 标记轴等的同时自动绘制一些图 假设我们有一个大型数据集 所有变量都已标记 这里的小例子 library tidyverse library sjlabelled libra
  • 导入 mgcv 失败,因为找不到 Rlapack.dll

    我想通过使用链接到 IronPython 中的 R 统计包R NET http rdotnet codeplex com 图书馆 它一直工作得很好 但现在我需要使用 R 的mgcv http cran r project org web p
  • r dplyr - 读取文件列表并使用文件名作为变量

    我想用每个文件的名称替换 image annotate 下面的 文本 library dplyr library purrr library magick list files path pattern png full names T g
  • 保存 d3heatmap 生成的热图

    我正在尝试保存由d3heatmap https github com rstudio d3heatmap转换为 pdf 文件 但文件总是损坏 library d3heatmap pdf file heat pdf d3heatmap mtc
  • 如何在Shiny中引用ui.R中的反应元素

    我正在使用 ShinyDND 包制作一个具有拖放功能的应用程序 我想将输入中的列表作为 DragSetUI 的参数传递 该函数需要在 ui R 中运行 我尝试了renderUI和uiOutput 它几乎可以工作 但是拖动的元素无法放置在放置
  • 无法安装bigrf包

    我在安装 bigrf R 软件包时遇到了一些极其令人沮丧的困难 我已经尝试过以下方法 install packages bigrf repo https github com aloysius lim bigrf git type sour
  • 使用 data.table 而不是 data.frame 进行子集化

    我正在处理一个包含 300 万行和 10 列的数据框 并且正在对其进行一些子集化 我下面有一些玩具代码 当我子集化时 需要很长时间 如果我使用 data table 和 data table 上的子集会更快吗 这是一些玩具代码 s lt c
  • R:重新列出平面列表

    这个问题 https stackoverflow com questions 8139677有一个很好的解决方案 可以在保留列表数据类型的同时展平列表 其中unlist才不是 flatten function x unlist vector
  • R Shinydashboard 根据选项卡选择显示/隐藏 UI 元素

    如果有人可以提供帮助 我正在努力满足要求 我必须根据用户的选项卡面板选择在仪表板侧栏上显示 隐藏一些元素 这是 UI 代码的一部分 可让您了解我的应用程序的结构 我需要仅在 tabpPanel 2 上显示 Fourthoutput Fift
  • 如何使用键盘命令中断 R 中正在运行的代码?

    如何中断 R 中正在运行的脚本 假设我遇到无限循环或其他问题 并且我想停止脚本运行 有键盘命令可以做到这一点吗 如果有帮助的话 在 Python 中是 Ctrl c 我在R中尝试过 但没有成功 自我回答 几乎是其他人的评论和答案的总结 In
  • 在 R 中绘制决策树(插入符)

    我已经训练了一个数据集rf方法 例如 ctrl lt trainControl method LGOCV repeats 3 savePred TRUE verboseIter TRUE preProcOptions list thresh
  • 在 R 中根据时间序列数据制作 3D 曲面

    我有一个大型数据集 我想从中制作 3D 表面 我希望 x 轴为日期 y 轴为时间 24 小时 z 轴 高度 为我的值 我是 R 初学者 所以越简单越好 http www quantmod com examples chartSeries3d
  • dplyr:取消选择由给出的列

    如何取消选择中给出的列 自写函数的参数 我还需要在另一点选择列 因此只需使用 in 没有解决我的问题 任何解决方案表示赞赏 select 帮助者 操纵者quosures或表达方式 very simple example data test
  • 在ggplot2中绘制大多边形地图的小区域

    我有一个 shapefile 我使用它在 ggplot2 中进行了强化和绘制geom polygon 我怎样才能只绘制这张地图的一小部分区域 我的完整地图看起来不错 但我的小区域很混乱 这是一个工作示例 这个小形状文件可以从以下位置获得 h
  • 仅当 ggplot 中 y 轴的下限设置为 0 时才会出现图条[重复]

    这个问题在这里已经有答案了 我正在尝试创建一个条形图 当我将限制设置为 0 7 时 就会出现条形 但是 我希望下限为 1 而不是 0 当我将下限设置为 1 时 条形图不会出现 我收到以下错误消息 Removed 8 rows contain
  • 有什么方法可以访问 makeActiveBinding 安装的函数吗?

    标题基本上说明了一切 如果我这样做 makeActiveBinding x function runif 2 GlobalEnv x 1 0 7332872 0 4707796 x 1 0 5500310 0 5013099 那我有什么办法
  • 如何测试字符串中的前三个字符是r中的字母还是数字?

    下面给出了我拥有的数据集的示例 请注意 总数据集中我有超过两列 ID X 1 MJF34 2 GA249D 3 DEW235R 4 4SDFR3 5 DAS3 我想测试 X 中的前三个字符是否是字母 如果是 那么我想替换该值以仅显示前三个字
  • 直接来自数据的马尔可夫模型图(makovchain 或 deemod 包?)

    我想读取一堆因子数据并从中创建一个可以很好地可视化的转换矩阵 我发现了一个非常好的软件包 称为 heemod 它与 diagram 一起工作得不错 对于我的第一个快速而肮脏的方法 我运行了一段 Python 代码来获取矩阵 然后使用这个 R
  • dplyr::mutate 添加多个值

    网上有几个与此相关的问题dplyr Github 存储库 https github com hadley dplyr已经 并且至少有一个相关的问题 但没有一个问题完全涵盖了我的问题 我认为 在 dplyr mutate 调用中添加多列 ht

随机推荐

  • AWS CodeBuild 无法与 RDS 实例交互

    我在 AWS 中有最基本的设置 一个可公开访问的 RDS 实例 PostgreSQL 9 6 6 与我的开发实例相同 CodeBuild 项目 均位于默认 VPC 中 我的应用程序是用 Laravel 5 5 编写的buildspec ym
  • Scala 中所有函数的超类型是什么?

    我知道我能做到instanceOf检查Function1 or Function2等等 但是有没有一种通用的方法来查看某些东西是否功能正常 它可以有任意数量的参数 我尝试定义这样的东西 type FuncType Any gt Any 但这
  • 在 Javascript 中,如何转换字符串以便可以使用它来调用属性?

    所以 我有一个关联数组 数组中的键是对象的属性 我想循环遍历数组 并在每次交互中执行如下操作 Object key 然而 这不起作用并导致返回未定义而不是属性的值 有没有办法做到这一点 您可以使用 for in 循环 for var key
  • 使用 RxJava 处理分页

    我在 Android 应用程序上使用 Retrofit RxJava 并询问自己如何处理 API 分页以链接调用 直到检索到所有数据 是这样的吗 Observable
  • Xcode 中是否支持 git rebasing?

    Can one rebase在 Xcode 中将一个分支的更改集成到另一个分支 我知道 Xcode 支持合并 但我找不到任何用于变基的东西 它没有 因为它试图提供对正在使用的版本控制系统的抽象 如果想要 git 的 Mac GUI 你可以使
  • Android ViewFlipper + 手势检测器

    我正在使用手势检测器来捕获 flings 并在发生这种情况时使用视图翻转器来更改屏幕 我的一些子视图包含列表视图 如果您在列表视图上滑动 手势检测器将无法识别滑动 但如果它位于 TextView 或 ImageView 的顶部 它会识别它
  • 目标文件中的符号表和重定位表

    据我了解 目标文件中的指令和数据都有地址 第一个数据项从地址 0 开始 第一条指令也从地址 0 开始 重定位表包含有关在文件中的地址发生变化时需要更新的指令的信息 例如 如果文件与另一个文件链接在一起 在下面的示例中 A 行将位于重定位表中
  • 如何将文本字符串发送到服务?

    我有一个桌面应用程序和一项服务 如何将字符串从桌面应用程序发送到我的服务并在服务中处理它 我不想使用套接字 因为它可能被 Windows 防火墙阻止 如果您不想使用网络传输 那么执行跨会话 IPC 的最简单方法可能是使用命名管道 需要注意的
  • 有没有一个工具可以自动将make文件转换为sln/vcproj?

    Google 展示了许多用于获取 Visual Studio 格式 sln vcproj 文件并从中生成 make 文件的工具 但我找不到解决相反问题的文件 我有一个引用数百个 c 和 h 文件的 make 文件 并且 为了方便 调试 在
  • Ruby on Rails - 在特定日期时间自动触发事件

    我想触发一个事件 特别是在特定日期时间 这是我的模型之一中的一列 发送一封电子邮件并更新某些模型的属性 我已经四处搜寻 但还没有真正找到任何解决方案 有什么办法可以实现这一点吗 您可以将排队解决方案与调度程序一起使用 排队解决方案 Resq
  • 用 NA 填充时间序列中缺失的月份[重复]

    这个问题在这里已经有答案了 我有数据集 年月数字 2002 01 2 392909 2002 02 2 496800 2002 03 2 341897 2002 04 1 665625 2002 05 2 398261 2003 01 1
  • Chrome 扩展:异步查询选项卡

    我有两个变量被设置为函数的 返回值 这些函数是获取选项卡的 URL 和对实际选项卡对象的引用 并将它们存储在变量中 我有一些代码 function init var url getUrl var tab getTab function ge
  • 提取标签之间的字母

    谁能指导我如何提取标签之间的单词 例如 hello in C 我猜他是想在之间说一句话tags 您应该使用正则表达式来实现相同的目的
  • c#:如何确定可滚动控件的 ScrollBar 当前是否显示?

    有没有办法让我检查控件的滚动条当前是否显示 我想使用它 这样我就可以确定如何调整 Scrollable 控件的子级的大小 这在某种程度上取决于 ScrollBar 是否显示 Scrollable 控件可以动态调整大小 对于具有 AutoSc
  • 如何在 Swift 中传递具有关联类型(通用协议)的协议作为参数?

    我必须将接口作为参数传递给函数 接口是通用的 也称为具有关联的类型 我找不到一个好的方法来做到这一点 这是我的代码 protocol IObserver class typealias DelegateT class Observer IO
  • Ninject:单例绑定语法?

    我正在将 Ninject 2 0 用于 Net 3 5 框架 我在单例绑定方面遇到困难 我有课UserInputReader它实现了IInputReader 我只希望创建该类的一个实例 public class MasterEngineMo
  • 按可以为 None 的属性对列表进行排序

    我正在尝试使用对对象列表进行排序 my list sort key operator attrgetter attr name 但如果任何列表项有attr None代替attr whatever 然后我得到一个TypeError unord
  • @错误抑制运算符和set_error_handler

    我遵循良好的编程实践 并将 PHP 错误记录到文件中 而不是将其显示给用户 我用set error handler 为了那个原因 现在问题来了 例如 我有一个地方 file exists some file that is outside
  • 具有分类变量的 statsmodels 中的聚类标准误差 (Python)

    我想在使用分类变量和聚类标准误差的 statsmodels 中运行回归 我有一个数据集 其中包含机构 治疗 年份和入学情况 治疗是一个虚拟变量 机构是一个字符串 其他都是数字 我已确保删除所有空值 df dropna reg model s
  • 在r中将地图叠加在3D曲面地图之上

    我使用 rgl surface 创建了一个 3d 地图 主要遵循 Shane 在中的回答this https stackoverflow com questions 1896419 plotting a 3d surface plot wi