2016-07-12 31 views
5

Tôi đang tìm cách tận dụng các tính năng tuyệt vời trong Plotly nhưng tôi đang gặp khó khăn trong việc tìm ra cách thêm một mặt phẳng hồi quy vào ô phân tán 3d. Đây là một ví dụ về làm thế nào để bắt đầu với cốt truyện 3d, không ai biết làm thế nào để có nó bước tiếp theo và thêm máy bay?Thêm Regression Plane vào 3d Scatter Plot trong Plotly

library(plotly) 
data(iris) 


iris_plot <- plot_ly(my_df, 
       x = Sepal.Length, 
       y = Sepal.Width, 
       z = Petal.Length, 
       type = "scatter3d", 
       mode = "markers") 

petal_lm <- lm(Petal.Length ~ 0 + Sepal.Length + Sepal.Width, 
       data = iris) 

Trả lời

3

Bạn cần lấy mẫu điểm dựa trên đối tượng dự đoán được tạo từ cuộc gọi lm. Điều này tạo ra một bề mặt tương tự như đối tượng volcano mà bạn có thể thêm vào cốt truyện của mình.

library(plotly) 
library(reshape2) 

#load data 

my_df <- iris 
petal_lm <- lm(Petal.Length ~ 0 + Sepal.Length + Sepal.Width,data = my_df) 

Sau đây thiết lập mức độ bề mặt của chúng tôi. Tôi đã chọn lấy mẫu 0,05 điểm và sử dụng mức độ của tập dữ liệu làm giới hạn của tôi. Có thể dễ dàng sửa đổi ở đây.

#Graph Resolution (more important for more complex shapes) 
graph_reso <- 0.05 

#Setup Axis 
axis_x <- seq(min(my_df$Sepal.Length), max(my_df$Sepal.Length), by = graph_reso) 
axis_y <- seq(min(my_df$Sepal.Width), max(my_df$Sepal.Width), by = graph_reso) 

#Sample points 
petal_lm_surface <- expand.grid(Sepal.Length = axis_x,Sepal.Width = axis_y,KEEP.OUT.ATTRS = F) 
petal_lm_surface$Petal.Length <- predict.lm(petal_lm, newdata = petal_lm_surface) 
petal_lm_surface <- acast(petal_lm_surface, Sepal.Width ~ Sepal.Length, value.var = "Petal.Length") #y ~ x 

Tại thời điểm này, chúng tôi có petal_lm_surface, có giá trị z cho mỗi x và y chúng tôi muốn vẽ đồ thị. Bây giờ chúng ta chỉ cần để tạo ra các đồ thị cơ sở (các điểm), thêm màu sắc và văn bản cho mỗi loài:

hcolors=c("red","blue","green")[my_df$Species] 
iris_plot <- plot_ly(my_df, 
        x = Sepal.Length, 
        y = Sepal.Width, 
        z = Petal.Length, 
        text = Species, 
        type = "scatter3d", 
        mode = "markers", 
        marker = list(color = hcolors)) 

và sau đó thêm các bề mặt:

iris_plot <- add_trace(last_plot = iris_plot, 
         z = petal_lm_surface, 
         x = axis_x, 
         y = axis_y, 
         type = "surface") 

iris_plot 

enter image description here

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