如何在稀疏点之间插入数据以在 R 和plotly 中绘制等高线图

2023-11-21

我想根据第一幅图中以下彩色点的浓度数据在 xy 平面上创建等值线图。我在每个高度都没有角点,因此我需要将浓度外推到 xy 平面的边缘 (xlim=c(0,335),ylim=c(0,426))。

enter image description here The plotly html file of the points is available here:

dput(df)
structure(list(Sensor = structure(c(11L, 12L, 13L, 14L, 15L, 
16L, 17L, 18L, 19L, 20L, 21L, 22L, 23L, 24L, 25L, 26L, 27L, 28L, 
29L, 1L, 3L, 4L, 5L, 6L, 8L, 30L, 31L, 32L, 33L, 34L, 35L), .Label = c("N1", 
"N2", "N3", "N4", "N5", "N6", "N7", "N8", "N9", "Control", "A1", 
"A10", "A11", "A12", "A13", "A14", "A15", "A16", "A17", "A18", 
"A19", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "R1", 
"R2", "R3", "R4", "R5", "R6"), class = "factor"), calCO2 = c(2237, 
2389.5, 2226.5, 2321, 2101.5, 1830.5, 2418, 2356.5, 435, 2345.5, 
2376, 2451, 2397, 2466, 2518.5, 2087, 2463, 2256.5, 2345.5, 3506, 
2950, 3386, 2511, 2385, 3441, 2473, 2357.5, 2052.5, 2318, 1893.5, 
2251), x = c(83.75, 167.5, 167.5, 167.5, 251.25, 167.5, 251.25, 
251.25, 0, 83.75, 251.25, 167.5, 251.25, 83.75, 83.75, 83.75, 
83.75, 251.25, 167.5, 335, 0, 0, 335, 167.5, 167.5, 167.5, 0, 
335, 335, 167.5, 167.5), y = c(213, 319.5, 319.5, 110, 319.5, 
213, 110, 110, 356, 213, 319.5, 110, 213, 110, 319.5, 319.5, 
110, 213, 213, 0, 0, 426, 426, 426, 0, 213, 213, 70, 213, 426, 
0), z = c(155, 50, 155, 155, 155, 226, 50, 155, 178, 50, 50, 
50, 50, 155, 50, 155, 50, 155, 50, 0, 0, 0, 0, 0, 0, 0, 130, 
50, 120, 130, 130), Type = c("Airnode", "Airnode", "Airnode", 
"Airnode", "Airnode", "Airnode", "Airnode", "Airnode", "Airnode", 
"Airnode", "Airnode", "Airnode", "Airnode", "Airnode", "Airnode", 
"Airnode", "Airnode", "Airnode", "Airnode", "Naveed", "Naveed", 
"Naveed", "Naveed", "Naveed", "Naveed", "Rotronic", "Rotronic", 
"Rotronic", "Rotronic", "Rotronic", "Rotronic")), .Names = c("Sensor", 
"calCO2", "x", "y", "z", "Type"), row.names = c(NA, -31L), class = "data.frame")

require(plotly)

plot_ly(data = subset(df,z==0), x=~x,y=~y, z=~calCO2, type = "contour") %>%
  layout(
    xaxis = list(range = c(340, 0), autorange = F, autorange="reversed"), 
    yaxis = list(range = c(0, 430)))

我正在努力寻找这样的东西。任何帮助将非常感激。

enter image description here


首先,您必须考虑到 +-30 点不足以获得示例中看到的那些干净的分离层。说了这么多,让我们开始工作吧:

首先,您可以监视数据以猜测这些层的形状。在这里您可以轻松地看到 z 值越低,CO2 值越高。

require(dplyr)
require(plotly)
require(akima)
require(plotly)
require(zoo)
require(raster)

plot_ly(df, x=~x,y=~y, z=~z, color =~calCO2)

enter image description here

重要的是你必须定义你将拥有的层。这些层必须由整个表面上的值插值制成。所以:

  • 定义每个层使用的数据。
  • 插入 z 和 calCO2 的值。这很重要,因为这是两件不同的事情。 z 插值将产生图形的形状,calCO2 将产生颜色(浓度或其他)。在你的图像中(https://plot.ly/r/3d-surface-plots/)颜色和 z 代表相同,而在这里,我猜你想代表 z 的表面并用 calCO2 对其进行着色。这就是为什么您需要为两者插入值的原因。插值方法是一个世界,这里我只是做了一个简单的插值,并用平均值填充了 NA。

这是代码:

## Define your layers in z range (by hand or use quantiles, percentiles, etc.)
df1 <- subset(df, z >= 0 & z <= 125) #layer between 0 and 150m
df2 <- subset(df, z > 125)           #layer between 150 and max

#interpolate values for each layer and for z and co2
z1 <- interp(df1$x, df1$y, df1$z, extrap = TRUE, duplicate = "mean") #interp z layer 1 with spline interp
ifelse(anyNA(z1$z) == TRUE, z1$z[is.na(z1$z)] <- mean(z1$z, na.rm = TRUE), NA) #fill na cells with mean value

z2 <- interp(df2$x, df2$y, df2$z, extrap = TRUE, duplicate = "mean") #interp z layer 2 with spline interp
ifelse(anyNA(z2$z) == TRUE, z2$z[is.na(z2$z)] <- mean(z2$z, na.rm = TRUE), NA) #fill na cells with mean value

c1 <- interp(df1$x, df1$y, df1$calCO2, extrap = F, linear = F, duplicate = "mean") #interp co2 layer 1 with spline interp
ifelse(anyNA(c1$z) == TRUE, c1$z[is.na(c1$z)] <- mean(c1$z, na.rm = TRUE), NA) #fill na cells with mean value

c2 <- interp(df2$x, df2$y, df2$calCO2, extrap = F, linear = F, duplicate = "mean") #interp co2 layer 2 with spline interp
ifelse(anyNA(c2$z) == TRUE, c2$z[is.na(c2$z)] <- mean(c2$z, na.rm = TRUE), NA) #fill na cells with mean value

#THE PLOT
p <- plot_ly(showscale = TRUE) %>%
    add_surface(x = z1$x, y = z1$y, z = z1$z, cmin = min(c1$z), cmax = max(c2$z), surfacecolor = c1$z) %>%
    add_surface(x = z2$x, y = z2$y, z = z2$z, cmin = min(c1$z), cmax = max(c2$z), surfacecolor = c2$z) %>%
    add_trace(data = df, x = ~x, y = ~y, z = ~z, mode = "markers", type = "scatter3d", 
              marker = list(size = 3.5, color = "red", symbol = 10))%>%
    layout(title="Stack Exchange Plot")
p

enter image description here

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

如何在稀疏点之间插入数据以在 R 和plotly 中绘制等高线图 的相关文章

  • 多功能测试仪替代 system.time

    我已经看到 我认为是这样 使用了类似于 system time 的函数 它可以同时评估多个函数的时间并输出一个输出 我不记得它是什么 并且用我正在使用的术语进行互联网搜索并没有得到我想要的响应 有人知道我正在谈论的功能的名称 位置吗 你想要
  • 选择 R 中的数据表中隐藏时(在绿色加号下方)列的显示顺序

    Context 使用 DataTables 库制作交互式表格时 当屏幕宽度对于列的数量和宽度来说太窄时 列将隐藏在绿色 号下 我有一个非常宽的表格 有 20 多列 其中一些内容非常冗长 因此某些列在所有屏幕宽度下总是隐藏的 每次隐藏新列时
  • 尝试读取 CSV 文件时出现“无法识别的字符串转义”

    我正在尝试导入一个 csv文件 以便我可以观看此视频 R ggplot2 图形直方图 http www youtube com watch v 47kWynt3b6M 我安装了所有正确的软件包 包括ggplot以及相关的包 视频中的第一个说
  • twitterR 和 ROAuth R 软件包安装

    我在安装 CRAN 上的 twitteR 和 RAOuth 软件包时遇到一些问题 我尝试了几种不同的方法 在 Windows 下使用源代码 在 Ubuntu 下使用 RStudio 我尝试了以下命令 sudo apt get install
  • 为什么 dplyr filter() 不能在函数内工作(即使用变量作为列名)?

    使用 dplyr 函数对数据进行过滤 分组和变异的函数 基本管道序列在函数之外工作得很好 这就是我使用真实列名称的地方 将其放入一个函数中 其中列名称是一个变量 并且某些函数可以工作 但有些函数则不能 尤其是 dplyr filter 例如
  • R 中的列乘以子字符串

    假设我有一个数据框 其中包含多个组件及其在多个列中列出的属性 并且我想对这些列运行多个函数 我的方法是尝试将其基于每个列标题中的子字符串 但我无法弄清楚如何做到这一点 下面是数据框的示例 Basket F Type 1 F Qty 1 F
  • 在 R 中使用 lapply 绘制多个数据帧

    我正在尝试使用 lapply 函数绘制多个数据帧 每个数据帧一个图 但是尽管有关此主题的所有帖子我都找不到答案 因为我不断收到错误 图的输出列表为空 我的数据结构如下 df1 lt mtcars gt group by cyl gt tal
  • 朴素贝叶斯分类器仅基于先验概率做出决策

    我试图根据推文的情绪将推文分为三类 买入 持有 卖出 我正在使用 R 和包 e1071 我有两个数据框 一个训练集和一组需要预测情绪的新推文 训练集数据框 text sentiment this stock is a good buy Bu
  • 只读取选定的列

    谁能告诉我如何仅读取下面每年数据的前 6 个月 7 列 例如使用read table Year Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 2009 41 27 25 31 31 39 2
  • 将阴影区域添加到五分位数之间的直方图中

    All 我有一个包含 2 个直方图的图表 其中我还绘制了代表第 20 40 60 和 80 个百分位数的线条 下面的代码使用虚拟数据重现了类似的图表 data lt rbind data frame x rnorm 1000 0 1 g o
  • 更改闪亮 R 中的默认浏览器

    我在 RStudio 中使用 01 hello 虽然在 IE 中默认打开程序时它不会显示直方图 但即使在 Chrome 中 滑块也不起作用 我无法滑动条形图并看到直方图中的变化 如何更改 R 中的默认浏览器 以便闪亮启动 Chrome 而不
  • 相当于 min() 的 rowMeans()

    我在 R 邮件列表上多次看到这个问题 但仍然找不到满意的答案 假设我有一个矩阵m m lt matrix rnorm 10000000 ncol 10 我可以通过以下方式获得每行的平均值 system time rowMeans m use
  • 如何从 R keras 中的类似生成器的数据中评估()和预测()

    我有以下代码 数据集可以下载here https www dropbox com s qjt5o31oyqj10m8 data tar gz dl 0 or here https www kaggle com c dogs vs cats
  • 如何在 R 或 Python 中制作旭日图?

    到目前为止 我一直无法找到一个可以创建旭日图的 R 库约翰 斯塔斯科 http www cc gatech edu gvu ii sunburst 有人知道如何在 R 或 Python 中实现这一点吗 在极坐标投影中使用 matplotli
  • 如何从 R 中的 txt 文件读取矩阵?

    我有一个带有矩阵的txt文件 Matrix txt 重要 数字之间没有空格 0100 1001 1100 我想在 R 中将其作为矩阵读取 我该怎么做 我尝试使用 as matrix read table Matrix txt sep 但失败
  • 将不均匀的层次列表转换为数据框

    我认为还没有有人问过这个问题 但是有没有一种方法可以将具有多个级别和不均匀结构的列表的信息组合成 长 格式的数据帧 具体来说 library XML library plyr xml inning lt http gd2 mlb com c
  • R:如何获取该月的周数

    我是 R 新手 我想要该日期所属月份的周数 通过使用以下代码 gt CurrentDate lt Sys Date gt Week Number lt format CurrentDate format U gt Week Number 3
  • read_html(url) 和 read_html(content(GET(url), "text")) 之间的区别

    我正在看这个很棒的答案 https stackoverflow com a 58211397 3502164 https stackoverflow com a 58211397 3502164 解决方案的开头包括 library httr
  • 以编程方式将字符串宽度值插入到 sprintf() 中

    我正在尝试以编程方式将字符串宽度值插入到sprintf 格式 期望的结果是 sprintf 20s hello 1 hello 但我想插入20在同一通话中即时进行 因此它可以是任何号码 我努力了 sprintf ds 20 hello 1
  • 如何将plot中的单变量列表图表转换为ggplot2格式?

    我正在搜索 但仍然找不到一个非常简单的问题的答案 我们如何使用 R 中的 ggplot2 生成一个变量的简单线图 我正在分析时间序列数据 并且想要对图表进行更复杂的操作 我认为如果我使用 ggplot2 代替会更好plot It works

随机推荐

  • Firebase Analytics 上传延迟

    有什么方法可以提高 Android 上记录事件的 Firebase Analytics 上传速率吗 目前它每小时上传一次 对于测试来说速度太慢 我在 jar 中找到了对以下键 具有硬编码默认值 的引用 但不知道如何更改它们 测量 上传 ba
  • Oracle 错误 ORA-06512

    只是不明白为什么它给我 ORA 06512 错误 PROCEDURE PX pNum INT pIdM INT pCv VARCHAR2 pSup FLOAT AS vSOME EX EXCEPTION BEGIN IF pNum lt 1
  • jftfdi jffi 对我的查询字符串做了什么?

    我们在项目中使用 JavaServer Faces 2 2 Mojarra 2 2 1 我注意到一些奇怪的事情 在一个名为reporting xhtml我在哪里使用f metadata与新的f viewAction我的浏览器 本例中为 Sa
  • 如何在 shell 脚本中进行异步函数调用

    我有一组由 shell 脚本执行的curl 命令 现在我想要的是所有这些命令都必须以固 定的时间间隔执行 每个curl url 都不同 所以我想做的是异步调用 wait sec 在不同的等待时间内命令并执行不同的功能 例如 启动 5 个计时
  • C# 获取窗口句柄

    我正在尝试执行一些 P Invoke 操作 并且需要当前窗口的句柄 I found C 获取窗口句柄 但似乎只适用于 WPF 有没有类似的winForms Control Handle An IntPtr包含控件的窗口句柄 HWND
  • 将列表转换为嵌套字典

    我怎样才能转换list进入嵌套的 字典 例如 l 1 2 3 4 我想将其转换为如下所示的字典 1 2 3 4 为此 反转列表 然后开始创建空字典元素 l 1 2 3 4 d for i in reversed l d i d gt gt
  • Webpack 找不到模块“电子”

    我正在尝试开发一个基于电子 Angular2 的小应用程序本教程 看来他们的 webpack 捆绑存在一些错误 因为我无法在渲染器组件中要求 导入电子遥控器 在我的 AppComponent 中我执行以下操作 import remote f
  • 无法添加名称为“testCompile”的配置,因为该名称的配置已存在

    更新到 gradle 插件 1 1 0 时 我不断收到以下错误 Cannot add a configuration with name testCompile as a configuration with that name alrea
  • 在 Visual Studio 设计器中为控件指定双击事件

    当您双击Control在 Visual Studio 设计器中 您会自动订阅一些event并在代码隐藏文件中生成事件处理程序 双击以下控件即可订阅相应的事件 UserControl Loaded Button Click TextBox 文
  • 如何在SQL Server数据库中使用UTF-8排序规则?

    我已经将数据库从mysql迁移到SQL Server 政治 原始mysql数据库使用UTF8 现在我读了https dba stackexchange com questions 7346 sql server 2005 2008 utf
  • Eclipse Android:无法打开选定的VM调试端口(8700)[重复]

    这个问题在这里已经有答案了 可能的重复 无法打开选定的 VM 调试端口 8700 打开时我在控制台上收到此错误Eclipse 无法打开选定的 VM 调试端口 8700 请确保您没有运行 DDMS 或 eclipse 插件的另一个实例 如果它
  • 删除 R 中的大括号

    如何删除R中的大括号 例如 abcd 到 abcd 如何使用 R 中的 gsub 函数来执行此操作 如果有其他方法可用 请建议 尝试这个 gsub abcd 1 abcd Or this gsub abcd
  • 如何从 javascript 文件中提取 javascript 函数

    我需要从脚本文件中提取整个 javascript 函数 我知道该函数的名称 但我不知道该函数的内容可能是什么 该函数可以嵌入任意数量的闭包中 我需要有两个输出值 我在输入脚本中找到的命名函数的整个主体 删除了找到的命名函数的完整输入脚本 所
  • 如何确保docker的时间与主机的时间同步?

    我有在 Linode 服务器上运行的 docker 有时 我发现码头工人的时间不对 目前我已经更改了每个泊坞窗中的运行脚本以包含以下代码行 yum install y ntp service ntpd stop ntpdate pool n
  • DispatchQueue.main.asyncAfter 不准确

    我试图在延迟后调用一个函数 在 iOS10 上 我可以使用 Timer scheduledTimer 它确实会在给定的延迟后调用我的闭包 但是 在 iOS9 上 我使用 DispatchQueue main asyncAfter 它会延迟六
  • 如何在flutter中使用“DateTime”显示月份

    我有一个日历 我想在日历上方显示月份 有没有办法只显示当前月份 归功于https github com adamstyrc 对于图像 它应该看起来像这样 使用以下包作为 DateFormat https pub dev packages i
  • 我们可以说 String 是 Javascript 中的对象吗?

    当我听到字符串是 JS 中的基元时 我总是很困惑 因为每个人都知道字符串有不同的方法 例如 length indexOf search 等 let string Please locate where locate occurs let p
  • clang 和 gcc 中是否有 Visual C++ __declspec (属性声明属性)的替代方案?

    有一个 Microsoft 特定的扩展 它可以像这样定义属性 getter 和 setter declspec property cpp struct S int i void putprop int j i j int getprop r
  • xpath 和 c#

    我正在尝试创建一个通过 XML 文档进行搜索的 winform 应用程序 对于我的搜索 我需要使用 lower case xpath 函数将 xpath 条件中的 XML 属性转换为小写 这会导致与函数命名空间相关的问题 我尝试手动添加名称
  • 如何在稀疏点之间插入数据以在 R 和plotly 中绘制等高线图

    我想根据第一幅图中以下彩色点的浓度数据在 xy 平面上创建等值线图 我在每个高度都没有角点 因此我需要将浓度外推到 xy 平面的边缘 xlim c 0 335 ylim c 0 426 The plotly html file of the