如何在 rgl 中绘制颜色条?

How to draw a colorbar in rgl?

我在 rgl 中绘制了一个网格以可视化其上的数据。即,网格的颜色源自将颜色图应用于其数据(每个顶点有一个标量值)。这是一个由具有单个面的网格组成的最小示例:

library(rgl);
library(squash);

# create a mesh
vertices <- c( 
    -1.0, -1.0, 0, 1.0,
    1.0, -1.0, 0, 1.0,
    1.0,  1.0, 0, 1.0,
    -1.0,  1.0, 0, 1.0
)
indices <- c( 1, 2, 3, 4 )

# add a data value for each vertex
morph_data = rnorm(length(indices), mean = 3, sd = 1)

# create colors from values by applying a colormap
col = squash::cmap(morph_data, map = squash::makecmap(morph_data, colFn = squash::jet));

# plot
open3d()  
shade3d( qmesh3d(vertices, indices), col=col )

如何在 rgl 中向该图添加颜色条?

我在 colorbar 中的确切含义的示例显示在 this example picture from octave.sourceforge.io.

的右侧部分

您可以使用 bgplot3d()rgl 图的背景中绘制任何类型的二维图。周围有很多不同的颜色条实现;请参阅 Colorbar from custom colorRampPalette 进行讨论。该线程中的最后一个 post 是在 2014 年,因此可能会有更新的解决方案。

例如,使用fields::image.plot函数,你可以把它放在你的绘图后面:

bgplot3d(fields::image.plot(legend.only = TRUE, zlim = range(morph_data), col = col) )

这种方法的一个记录缺点是 window 不能很好地调整大小;你应该先设置你的 window 大小,然后添加颜色条。如果您确实使用 image.plot.

,您还需要处理 col 的定义以获得超过 4 种颜色显示