2017-12-16 108 views
8

Tôi muốn vẽ lô đất 3D với Lô theo chuỗi thời gian và điền vào mỗi dòng. Tôi có một mã ví dụ ở đây.Tô màu 3D theo đường dây

library(plotly) 

dens <- with(diamonds, tapply(price, INDEX = cut, density)) 
data <- data.frame(
    x = unlist(lapply(dens, "[[", "x")), 
    y = unlist(lapply(dens, "[[", "y")), 
    cut = rep(names(dens), each = length(dens[[1]]$x))) 

p <- plot_ly(data, x = ~cut, y = ~x, z = ~y, type = 'scatter3d', mode = 'lines', color = ~cut) 
p 

với mã này tôi có thể sản xuất âm mưu này

cốt truyện dòng 3d mà không cần điền

enter image description here

Tôi đã cố gắng surfaceaxis=0, 1, hoặc 2 và họ đã tạo ra trám sai.

3D-Plotly với sai điền

enter image description here

Những gì tôi muốn là để điền vào các lĩnh vực giữa trục x và đường lô.

có một ví dụ 3D-cốt truyện với một giá trị khác.

Như một ví dụ 3D-Lô bằng cách điền thông dưới đường cong cho một giá trị

enter image description here

Có thể ai đó xin đề nghị một phương pháp? Cảm ơn bạn trước.

Edit: Nó phải được tạo ra với các gói "plotly"

Trả lời

2

Cập nhật:

này nên làm việc cho bạn;

rle_x <- rle(as.numeric(factor(data$cut)))$lengths 

mcolor <- c("red","blue","green","purple", "yellow")  

data$mcolor<-rep(mcolor[seq_along(rle_x)],times = rle_x) 

cloud(y~x+cut, data, panel.3d.cloud=panel.3dbars, 
     xbase=0.4, ybase=0.4, scales=list(arrows=FALSE, col=1), 
     par.settings = list(axis.line = list(col = "transparent")), 
     col.facet = data$mcolor, 
     col = data$mcolor) 

enter image description here

phiên bản đầu tiên của câu trả lời:

Bạn có thể thử sử dụng latticeExtra::cloud. Chắc chắn, nó sẽ không cung cấp cho các âm mưu tương tác như plotly.

cloud(y~x+cut, data, panel.3d.cloud=panel.3dbars, 
     xbase=0.4, ybase=0.4, scales=list(arrows=FALSE, col=1), 
     par.settings = list(axis.line = list(col = "transparent"))) 

enter image description here

2

Nếu bạn Ok với pseudo-3d, bạn có thể làm một âm mưu mật độ Ridgeline. Tôi tin rằng có một phiên bản rõ ràng có sẵn là tốt.

Tuyên bố từ chối trách nhiệm: Tôi là tác giả của gói ggridges.

library(ggplot2) 
library(ggridges) 

ggplot(diamonds, aes(x = price, y = cut, fill = cut)) + 
    geom_density_ridges(scale = 2, alpha = 0.7) + 
    scale_fill_brewer(guide = guide_legend(reverse = TRUE)) + 
    scale_y_discrete(expand = c(0.01, 0)) + 
    theme_ridges(center = TRUE) 

enter image description here

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