2016-07-12 26 views
5

Plotly'deki harika özelliklerden yararlanmak için arıyorum ama bir 3d dağılım grafiğine bir regresyon düzlemi nasıl ekleyeceğimi bulmakta zorlanıyorum. İşte, 3d arsaya nasıl başlayacağınıza dair bir örnek, bir sonraki adımı nasıl atılacağını ve uçağı nasıl ekleyeceğini bilen var mı?Plotly içinde 3d dağılım grafiğe Regresyon Düzlemi Ekle

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) 

cevap

3

Sen lm çağrısından oluşturulan tahmin nesneye dayalı noktaları örneklemek gerekir. Bu, ardınıza ekleyebileceğiniz volcano nesnesine benzer bir yüzey oluşturur.

library(plotly) 
library(reshape2) 

#load data 

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

Aşağıdakiler, yüzeyimizin kapsamını ayarlar. Her 0.05 noktayı örneklemeyi seçtim ve veri setinin kapsamını limitlerim olarak kullanıyorum. Burada kolayca değiştirilebilir. Bu noktada

#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 

biz grafik istediğiniz her x ve y, z değeri vardır petal_lm_surface sahiptir. Şimdi sadece her tür için renk ve metin ekleyerek, baz grafiği (puan) oluşturmanız gerekir:

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

ve sonra yüzey ekleyin:

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

İlgili konular