2016-07-12 63 views
5

私はPlotlyの素晴らしい機能を利用しようとしていますが、3D散布図に回帰平面を追加する方法がわかりません。ここでは、3Dプロットを開始する方法の例ですが、誰かに次のステップを踏み、プレーンを追加する方法を知っていますか?回帰平面を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 

、我々はグラフにしたいすべてのxとyのz値を持つpetal_lm_surfaceを、持っています。今、私たちはただ、それぞれの種の色やテキストを追加し、ベースのグラフ(ポイント)を作成する必要があります。

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

関連する問題