2012-05-02 32 views
9

Tôi là người mới bắt đầu ở R và cần một chút trợ giúp cho tập lệnh của tôi. Tôi đã quản lý để tạo ra thang màu gradient bằng cách sử dụng thư viện (ggplot2) trên các ô 2D của tôi như sau;Cách gán thang màu cho một biến trong ô phân tá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")) 

Tôi hiện đang cố gắng tạo lại gradient này trên ô 3D, tôi đã sử dụng scatterplot3d hoặc plot3d. Tôi tin rằng colorRampPalette tạo ra một gradient màu dựa trên 327 hàng (1… 327) trong khi tôi quan tâm đến một gradient đó là chức năng của các giá trị trong dữ liệu $ conf. Tôi cần kết nối, nhưng ở đâu?

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

Nếu bạn có thể giúp tôi điều đó thật tuyệt vời - Hoặc nếu bạn biết bất kỳ gói lôgic/thang đo 3D nào cũng có thể làm tốt hơn, hãy làm mát.

Trả lời

10

Bạn đang đi đúng hướng với colorRampPalette(), nhưng thực sự cần một cái gì đó giống như colorRamp(), trong đó 'returns a function that maps values between 0 and 1'.

Thậm chí tốt hơn sẽ là một chức năng - gọi nó là myColorRamp() - đó là như colorRamp() nhưng thay vì: (a) bản đồ giá trị giữa min(values)max(values); và (b) trả về màu sắc dưới dạng chuỗi sRGB 7 ký tự (ví dụ: "# F60008"), định dạng mà plot3d() hiểu.

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

Cảm ơn Josh. Kết quả là phép chiếu sammon 3D của ~ 700 hợp chất có xác suất tương ứng để vượt qua hàng rào máu-não. – user1369966

+0

Cảm ơn vì điều đó. Nó luôn luôn (OK, thường) thú vị để biết những gì một câu trả lời thực sự đang được sử dụng cho. –

Các vấn đề liên quan