1

问题:我正在尝试使用 plotly 在 R 中重现圆形填充的 2d 等高线图(也尝试过 ggplot2,但 plotly 似乎更容易)。

数据:示例数据下载链接 - https://drive.google.com/file/d/10Mr5yWVReQckPI6TKLY_vzPT8zWiijKl/view?usp=sharing

为等高线绘制的数据采用列格式,通常称为z变量,也有x数据y可用于 的所有值z。一个简单的数据框如下所示:

示例数据框

请忽略重复的常见 x 和 y,因为我已经截断了小数。数据大约有 25000 行。

方法:我首先使用 akima 包z对给定的变量值进行插值x并在 2dy中映射。z这使得z列数据适合用于 2d 绘图和显示轮廓的 xy 网格。

预期结果:
z 变量的二维等高线图

使用的代码:

dens <- akima::interp(x = dt$`Xvalue(mm)`, 
                  y = dt$`Yvalue(mm)`, 
                  z = dt$Values, 
                  duplicate = "mean",
                  xo=seq(min(dt$`Xvalue(mm)`), max(dt$`Xvalue(mm)`), length = 10),
                  yo=seq(min(dt$`Yvalue(mm)`), max(dt$`Yvalue(mm)`), length = 10))

plot_ly(x = dens$x, 
      y = dens$y, 
      z = dens$z, 
      colors = c("blue","grey","red"), 
      type = "contour")

实际结果: 绘制等高线图

需要帮助: 将实际结果图的边缘细化为与预期结果图像非常匹配的东西。

非常感谢您的评论和帮助。

4

1 回答 1

0

我发现我可以将网格输出z矩阵akima::interp()从默认的 40x40 增加到自定义使用nxny输入功能。

然后plot_ly()添加contours = list(coloring = 'fill', showlines = FALSE)隐藏轮廓线以使输出接近我的预期结果。

所以工作代码是这样的:

dens <- akima::interp(x = dt$`Xvalue(mm)`, 
              y = dt$`Yvalue(mm)`, 
              z = dt$Values, 
              nx = 50, 
              ny = 50,
              duplicate = "mean",
              xo=seq(min(dt$`Xvalue(mm)`), max(dt$`Xvalue(mm)`), length = 50),
              yo=seq(min(dt$`Yvalue(mm)`), max(dt$`Yvalue(mm)`), length = 50))

plot_ly(x = dens$x, 
  y = dens$y, 
  z = dens$z, 
  colors = c("blue","grey","red"), 
  type = "contour",
  contours = list(coloring = 'fill', showlines = FALSE))

实际结果

Plotly 等高线图参考在这种情况下非常有用: https ://plot.ly/r/reference/#contour

于 2018-01-23T19:33:47.707 回答