2012-05-02 11 views
9

私はRの初心者で、スクリプト作成には少しの助けが必要です。 次のように、私の2Dプロットでライブラリ(ggplot2)を使ってスケールカラーグラデーションを生成することができました。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")) 

私は今、私はscatterplot3dまたはPLOT3Dを使用し、3次元プロット上にこのグラデーションを再現しようとしています。私は、データ$ conf内の値の関数であるグラデーションに興味がある間、colorRampPaletteは327行(1 ... 327)に基づいてカラーグラデーションを作成すると信じています。私は接続が必要ですが、どこですか?

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()のようなものですが、これは:(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) 

enter image description here

+0

感謝ジョシュ。結果は、約700個の化合物の3Dサモモン投影であり、それぞれ血液脳関門を通過する可能性がある。 – user1369966

+0

ありがとう。答えが実際にどのように使用されているかを知ることは、常に(OK、しばしば)興味深いことです。 –

関連する問題