आप अपने 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