9

私は R の初心者で、スクリプト作成に少し助けが必要です。次のように、2Dプロットでライブラリ(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

You are on the right track with colorRampPalette(), but really need something more like colorRamp(), which 'returns a function that maps values between 0 and 1'.

Even better would be a function -- call it myColorRamp() -- which is like colorRamp() but instead: (a) maps values between min(values) and max(values); and (b) returns the colors as 7-character sRGB strings (e.g. "#F60008"), a format that plot3d() understands.

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

于 2012-05-02T16:15:59.113 に答える