2016-07-12 19 views
5

में 3 डी स्कैटर प्लॉट में रीग्रेशन प्लेन जोड़ें, मैं प्लॉटली में शानदार सुविधाओं का लाभ उठाने के लिए देख रहा हूं लेकिन मुझे एक कठिन समय लग रहा है कि एक 3 डी स्कैटर प्लॉट में रीग्रेशन प्लेन कैसे जोड़ें। यहां 3 डी प्लॉट के साथ शुरुआत करने का एक उदाहरण दिया गया है, क्या कोई यह जानता है कि इसे अगले चरण में कैसे लेना है और विमान जोड़ना है?प्लॉटली

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) 

उत्तर

3

आप अपने lm कॉल से बनाए भविष्यवाणी वस्तु के आधार पर अंक नमूने के लिए की जरूरत है। यह volcano ऑब्जेक्ट की तरह एक सतह बनाता है जिसे आप अपनी साजिश में जोड़ सकते हैं।

library(plotly) 
library(reshape2) 

#load data 

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

निम्नलिखित हमारी सतह की सीमा निर्धारित करता है। मैंने प्रत्येक 0.05 अंक का नमूना चुना है, और डेटा सीमा की सीमा को मेरी सीमा के रूप में उपयोग किया है। आसानी से यहां संशोधित किया जा सकता है।

#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 

इस बिंदु पर, हम petal_lm_surface है, जो हर x और y हम ग्राफ़ चाहते हैं के लिए z महत्व है है। अब हम सिर्फ, आधार ग्राफ (अंक) बनाने की जरूरत प्रत्येक प्रजाति के लिए रंग और पाठ जोड़ने:

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)) 

और फिर सतह जोड़ें:

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

संबंधित मुद्दे