2012-05-02 39 views
9

我是R的初學者,需要爲我的腳本提供一些幫助。 我設法使用庫(ggplot2)在我的2D圖上生成縮放顏色漸變,如下所示;如何將顏色比例分配給3D散點圖中的變量?

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)的顏色漸變,而我對數據$ conf中的值函數的漸變感興趣。我需要一個連接,但在哪裏?

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

如果你能幫助我,那將是偉大的 - 或者如果你知道任何3D陰謀/規模漸變包可以做得更好,也很酷。

回答

10

您與colorRampPalette()正確的軌道,但真的需要更像colorRamp(),其中'returns a function that maps values between 0 and 1'

更妙的是一個功能 - 稱之爲myColorRamp() - 這就好比colorRamp()而是:(一)映射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) 

enter image description here

+0

感謝約什。結果是大約700種化合物的三維掃描儀投影以及它們各自穿過血腦屏障的可能性。 – user1369966

+0

謝謝你。知道一個答案實際上被用於什麼總是(好的,經常)有趣的。 –

相關問題