如何根据 rgl 中数据框中的值使线段着色?

How do I make line segments colored based on values in a data frame in rgl?

我正在使用 rgl 包绘制 3d 线段。我想根据未绘制的数据框中的值对线段进行颜色编码。我可以让线条着色,但是,每个部分似乎都是颜色渐变。我怎样才能让每个段都变成一种纯色?此外,线条不会根据我尝试使用的数据框中的值进行着色。我的函数适用于散点图,但我担心它不能很好地转化为线段。我的代码连同我的测试数据一起发布在下面。

library("rgl")
library("rglwidget")

zz <- "
sequence    x   y   z   x2  y2  z2  col
a   1   5   1   100 1000    2   4
b   2   4   1   200 900 2   3
c   2   4   1   300 800 2   2
d   2   4   1   400 700 2   1
e   3   3   1   500 600 2   0
f   3   3   1   600 500 2   -1
g   4   2   1   700 400 2   -2
h   4   2   1   800 300 2   -3
I   4   2   1   900 200 2   -4
j   5   1   1   1000    100 2   -5"


data <- read.table(text=zz, header=TRUE)

w <- names(data[8])

gradient <- colorRampPalette(c("red", "orange", "yellow", "green", "blue", "violet"))

v <- gradient(10)[as.numeric(cut(data[[w]], breaks=10))]

segments3d(x=as.vector(t(log(data[,c(2,5)]))),
       y=as.vector(t(data[,c(4,7)])),
       z=as.vector(t(log(data[,c(3,6)]))),
       axes=FALSE, col=v, plot=TRUE)

rgl.bbox(color="grey50", emission="grey50",
     xat = log(10^((-1):6)), yat = c(1, 2, 3, 4), zat = log(10^((-1):6)), xlab=10^((-1):6), ylab = (1:4), zlab=10^((-1):6))

aspect3d(1,1,1)

无论如何,您最好更新rglrglwidget包中的功能已移至rgl)。 rgl通过"points"控制线条的颜色。所以你需要给每行两次颜色。

x = as.vector(t(log(data[,c(2,5)])))
y = as.vector(t(data[,c(4,7)]))
z = as.vector(t(log(data[,c(3,6)])))
ind <- seq(2, 20, 2)

segments3d(x, y, z, axes = FALSE, col = rep(v, each = 2))
texts3d(x[ind], y[ind], z[ind], texts = data$sequence, col = v)
axes3d(xat = log(10^((-1):6)), yat = c(1, 2, 3, 4), zat = log(10^((-1):6)), 
       xlab = 10^((-1):6), ylab = (1:4), zlab = 10^((-1):6))
aspect3d(1, 1, 1)