2012-05-02 17 views
9

R'de yeni başlayan biriyim ve komut dosyam için biraz yardıma ihtiyacım var. 2B grafiklerimdeki kitaplığı (ggplot2) kullanarak ölçek renk gradyanını aşağıdaki gibi oluşturmayı başardım; Şimdi bir 3D arsa üzerinde bu eğimi yeniden oluşturmaya çalışıyorum3B dağılım grafiğinde bir değişkene renk ölçeği nasıl atanır?

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")) 

, ben scatterplot3d veya plot3d kullandı. ColorRampPalette, veri $ conf değerinin işlevi olan bir degrade ile ilgilenirken, 327 satır (1… 327) dayalı bir renk gradyanı oluşturduğuna inanıyorum. Bağlantıya ihtiyacım var ama nerede?

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

harika olacağını bana yardımcı olabilir - Ya da daha iyi bir iş yapabilir herhangi bir 3D arsa/ölçek degrade paketi biliyorsanız, çok serin.

cevap

10

colorRampPalette() ile doğru yoldasınız, ancak , 'returns a function that maps values between 0 and 1' gibi bir şeye ihtiyacınız var.

Daha da iyisi bir işlev olacağını - it myColorRamp() call - yerine colorRamp() ama gibidir: (a) min(values) ve max(values) arasındaki değerler eşler; ve (b) renkleri, plot3d()'un anladığı bir format olan 7 karakterlik sRGB dizileri (ör. "# F60008") olarak döndürür.

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

Teşekkür Josh. Sonuçlar, kan-beyin bariyerini geçme olasılıkları ile ~ 700 bileşiğinin 3D sammon projeksiyonudur. – user1369966

+0

Bunun için teşekkürler. Bir cevabın aslında ne için kullanıldığını bilmek her zaman ilginçtir. –