使用 gnuplot 可视化体素化

Visualizing a voxelization using gnuplot

我需要使用 gnuplot 可视化体素化。

每个体素的形式为:

x y z [active] 其中 [active] 可以是 1 或 0。

x,y,z 是网格中的相对位置,所以它们只是整数。

一个例子可能是:

0 0 0 1
1 0 0 1
2 0 0 0
...
32 15 20 1
33 15 20 0
34 15 20 1

这似乎可以简化为带有颜色的 3D 图,类似于 this question

但是,我不能一字不差地使用它,因为其中存在一些显着差异。最重要的是我的点与它们本身没有任何连接,因为它们是体素而不是点。所以把它画成 sheet 是行不通的:

在每个点上绘制立方体会很棒,但我觉得这比它的价值更复杂。是否有任何相当简单的方法来获得可能有点接近的绘图?即使它只是 3D 中的点,如果它们是不同的,那可能就足够了。

使用平滑调色板按第 4 列中的值着色的 3D 点:

  splot "data.dat" using 1:2:3:4 with points lc palette

使用整数线型按第 4 列中的值着色的 3D 点。在您的情况下,预期值为 0/1,因此我们将其提高 1 以使用线型 1 和 2:

  splot "data.dat" using 1:2:3:( + 1) with points lc variable

我不明白你说的 "drawing cubes at each point" 是什么意思。您可以通过指定点类型 (shorthand "pt") 和点大小 (shorthand {ps") 来选择点符号。这里我们使用大实心方块

 splot "data.dat" using 1:2:3( + 1) with point lc variable pt 5 ps 3

补充评论 如果您的点主要位于您显示的图形所暗示的平面或其他光滑表面上,那么您可能能够推导并绘制该表面本身,而不是绘制单个点。不清楚 0/1 属性是否对应于 on/off 该表面的点。如果是这样,您应该 select 只有适当的点子集来导出曲面。可以选择各种算法来导出表面,我不会在这里尝试总结,但请参阅 set dgrid3d 的 gnuplot 文档。这种渲染模式可能会使 3D 交互对大型数据集更敏感,但我不清楚如何将它与 0/1 点子集的本地化可视化相结合。我需要更多地了解列值的属性和重要性。以下命令序列 select 是第 4 列值为零的点的子集,并将它们绘制为表面。

set dgrid3d
splot "data.dat" using (==0 ?  : NaN):2:3 with lines