2012-05-02 18 views
9

Soy un principiante en R y necesito un poco de ayuda para mis scripts. Logré generar gradiente de color de escala utilizando la biblioteca (ggplot2) en mis gráficos 2D de la siguiente manera;¿Cómo asignar escala de color a una variable en un diagrama de dispersión 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")) 

Ahora estoy tratando de reproducir este gradiente en una parcela en 3D, que utiliza scatterplot3d o dibujar3d. Creo que colorRampPalette crea un gradiente de color basado en 327 filas (1 ... 327) mientras que estoy interesado en un degradado que es función de los valores en data $ conf. Necesito una conexión, pero ¿dónde?

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

Si usted me puede ayudar que será grande - O si usted sabe cualquier paquete gradiente de trama/escala 3D que puede hacer un mejor trabajo, enfriar demasiado.

Respuesta

10

Estás en el camino correcto con colorRampPalette(), pero realmente necesitas algo más como colorRamp(), que 'returns a function that maps values between 0 and 1'.

Aún mejor sería una función - llamarlo myColorRamp() - que es como colorRamp() sino que: (a) los mapas de valores entre min(values) y max(values); y (b) devuelve los colores como cadenas sRGB de 7 caracteres (por ejemplo, "# F60008"), un formato que plot3d() entiende.

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

Gracias Josh. Los resultados son una proyección de sammon 3D de ~ 700 compuestos con sus respectivas probabilidades de cruzar la barrera sangre-cerebro. – user1369966

+0

Gracias por eso. Siempre (bueno, a menudo) es interesante saber para qué se usa realmente una respuesta. –

Cuestiones relacionadas