당신은 당신의 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
을