【问题标题】:Plotting a 3D volume plot in R using discrete 3D points使用离散的 3D 点在 R 中绘制 3D 体积图
【发布时间】:2021-05-14 10:21:35
【问题描述】:

我正在尝试在 R 中创建一个体积图,以显示 3D 空间中点的平滑密度。我目前正在使用 plotly 与 scatter3D 进行绘图。

  df = data.frame(a = sample(seq(.5,.8,.001),100), 
              b = sample(seq(0,.5,.001),100), 
              c = sample(seq(0,.3,.001),100), 
              value = sample(seq(0,1,.01),100))


plot_ly(df, x = ~a, y = ~b, z = ~c, type = 'scatter3d')

将类型设置为“mesh3d”可以将这些点连接为 3d 空间中的表面。

  plot_ly(df, x = ~a, y = ~b, z = ~c, type = 'mesh3d')

但是,尝试将类型设置为“体积”每次都会给我一个空白图。

  plot_ly(df, x = ~a, y = ~b, z = ~c, value = ~value, type = 'volume', 
          isomin = 0, isomax = 1, opacity = 1)

文档在这里:https://plotly.com/r/reference/volume/ 并指定:

在 iso-min 和 iso-max 值之间绘制体积轨迹,坐标由四个一维数组给出,这些数组包含均匀或非均匀的每个顶点的valuexyz统一的 3-D 网格。也可以使用此轨迹绘制水平或垂直切片、大写字母以及 iso-min 和 iso-max 值之间的空间框架。

plotly 的 python 版本提供了一个示例:https://plotly.com/python/3d-volume-plots/ 但我不知道我在哪里错过了到 R 的转换。我已经包含了体积图的额外值维度,但它似乎没有做任何事。

【问题讨论】:

    标签: r ggplot2 3d plotly


    【解决方案1】:

    与 plotly 的文档中指出您可以使用非均匀网格和体积不同,实际上不可能使用 isominisomax 绘制 3d 体积。有一个不均匀的坐标会使整个图无效。我为同样的问题苦苦挣扎了很久,想知道为什么我的情节总是空白。

    为了演示,首先创建一个具有统一网格的图。例如,使用您链接的资源中的 Python 示例:https://plotly.com/python/3d-volume-plots/。 (不管是 Python API,渲染绘图与语言无关)。

    import plotly.graph_objects as go
    import numpy as np
    X, Y, Z = np.mgrid[-8:8:40j, -8:8:40j, -8:8:40j]
    values = np.sin(X*Y*Z) / (X*Y*Z)
    
    fig = go.Figure(data=go.Volume(
        x=X.flatten(),
        y=Y.flatten(),
        z=Z.flatten(),
        value=values.flatten(),
        isomin=0.1,
        isomax=0.8,
        opacity=0.1, # needs to be small to see through all surfaces
        surface_count=17, # needs to be a large number for good volume rendering
        ))
    fig.show()
    

    这应该显示一个情节。接下来,改变一个点的坐标:

    X[0, 0, 0] += 1
    

    还有 tada:它不再起作用并显示一个空的情节。

    【讨论】:

      猜你喜欢
      • 2014-09-03
      • 2015-06-15
      • 2021-04-07
      • 1970-01-01
      • 2017-04-29
      • 1970-01-01
      • 1970-01-01
      • 2016-04-28
      • 1970-01-01
      相关资源
      最近更新 更多