【问题标题】:How to assign color scale to a variable in a 3D scatter plot?如何为 3D 散点图中的变量分配色阶?
【发布时间】:2012-05-11 22:09:26
【问题描述】:

我是 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 绘图/比例渐变包,也很酷。

【问题讨论】:

    标签: r colors ggplot2 3d gradient


    【解决方案1】:

    您与colorRampPalette() 走在正确的轨道上,但确实需要更像colorRamp() 的东西'returns a function that maps values between 0 and 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)
    

    【讨论】:

    • 谢谢乔希。结果是约 700 种化合物的 3D sammon 投影,具有它们各自穿过血脑屏障的概率。
    • 谢谢。知道答案的实际用途总是(好吧,经常)很有趣。
    猜你喜欢
    • 2020-08-13
    • 2020-06-25
    • 2022-07-08
    • 2021-02-15
    • 1970-01-01
    • 2019-05-14
    • 2016-11-20
    • 2012-02-12
    • 1970-01-01
    相关资源
    最近更新 更多