9

我是 R 的初学者,我的脚本需要一些帮助。我设法在我的 2D 图上使用 library(ggplot2) 生成比例颜色渐变,如下所示;

z <- c(data$conf)
d <- qplot(x, y, xlab="Dimension 1", ylab="Dimension 2", colour=z)
d
d + scale_colour_gradient(limits=c(0, 1), data=data$conf, low="blue", high="red"))

我现在试图在 3D 图上重现这个渐变,我使用了 scatterplot3d 或 plot3d。我相信 colorRampPalette 创建基于 327 行 (1…327) 的颜色渐变,而我对作为 data$conf 中值的函数的渐变感兴趣。我需要一个连接,但在哪里?

attach(data)
t1 <- c(data$conf)
jet.colors <- colorRampPalette(c("blue", "red"))
e <- plot3d(x, y, z, col=jet.colors(327))

如果你能帮助我,那就太好了——或者如果你知道任何可以做得更好的 3D 绘图/比例渐变包,也很酷。

4

1 回答 1

11

您在正确的轨道上使用colorRampPalette(),但确实需要更多类似的东西colorRamp(),它“返回一个映射 0 和 1 之间值的函数”

更好的是一个函数——称之为它myColorRamp()——它就像colorRamp()但相反:(a) 映射和之间的min(values)max(values);(b) 将颜色作为 7 个字符的 sRGB 字符串(例如“#F60008”)返回,这是一种可以plot3d()理解的格式。

library(rgl)

myColorRamp <- function(colors, values) {
    v <- (values - min(values))/diff(range(values))
    x <- colorRamp(colors)(v)
    rgb(x[,1], x[,2], x[,3], maxColorValue = 255)
}

x <- sin((1:100)/10)
y <- cos((1:100)/10)
z <- seq(-20, 20, length.out=100)

cols <- myColorRamp(c("red", "blue"), z) 
plot3d(x = x, y = y, z = z, col = cols)

在此处输入图像描述

于 2012-05-02T16:15:59.113 回答