代码之家  ›  专栏  ›  技术社区  ›  M.Teich

具有空间数据的三维交互式曲面绘制

  •  2
  • M.Teich  · 技术社区  · 7 年前

    plotly rgl 图书馆。我已从数据库中提取数据 SpatialLinesDataFrame 等高线的高斯-克鲁格/EPSG:31468克朗,即公制单位。现在,每条等高线生成一组具有相同深度值的坐标。生成的数据帧相当大,但看起来像这样:

    set.seed(41)
    xx <- rnorm(100,4448929,100)
    yy <- rnorm(100,5308097,100)
    zz <- c(rep(-10,10),rep(-20,10),rep(-30,10),rep(-40,10),rep(-50,10),rep(-60,10),rep(-70,10),rep(-80,10),rep(-90,10),rep(-100,10))
    df <- data.frame(xx,yy,zz)
    

    我试着用计算机绘制数据 阴谋地 this 以身作则 this 邮递在这两种情况下,我都会收到与我的数据不是矩阵格式有关的错误消息,即x和y值表示为行号和列号。

    什么是有效的,是使用 add_trace 指挥 阴谋地 :

    plot_ly() %>% add_trace(df,x = ~df$xx, y = ~df$yy, z = ~df$zz,type="mesh3d")
    

    add_surface 命令,但更重要的是,相对于z值扭曲x值和y值。z值显示得太大,尽管它们都具有相同的公制单位。

    我还尝试将数据帧重塑为矩阵,如中所示 this

    任何建议将不胜感激-谢谢!

    1 回复  |  直到 7 年前
        1
  •  1
  •   user2554330    7 年前

    这些是随机定位的点,所以 rgl::persp3d 不能直接处理它们。但是,您可以按照中的示例进行操作 ?rgl::persp3d.deldir 对它们进行三角测量,然后进行绘图。例如

    dxyz <- deldir::deldir(df$xx, df$yy, z = df$zz, suppressMsgs=TRUE)
    persp3d(dxyz, col = "lightblue")
    

    这将导致一幅非常丑陋的画面,但通过一些工作(例如,修复轴标签,使用真实数据),您应该会得到一些合理的结果。

    推荐文章