如何根据 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)
无论如何,您最好更新rgl
(rglwidget
包中的功能已移至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)
我正在使用 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)
无论如何,您最好更新rgl
(rglwidget
包中的功能已移至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)