Bạn cần lấy mẫu điểm dựa trên đối tượng dự đoán được tạo từ cuộc gọi lm
. Điều này tạo ra một bề mặt tương tự như đối tượng volcano mà bạn có thể thêm vào cốt truyện của mình.
library(plotly)
library(reshape2)
#load data
my_df <- iris
petal_lm <- lm(Petal.Length ~ 0 + Sepal.Length + Sepal.Width,data = my_df)
Sau đây thiết lập mức độ bề mặt của chúng tôi. Tôi đã chọn lấy mẫu 0,05 điểm và sử dụng mức độ của tập dữ liệu làm giới hạn của tôi. Có thể dễ dàng sửa đổi ở đây.
#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
Tại thời điểm này, chúng tôi có petal_lm_surface
, có giá trị z cho mỗi x và y chúng tôi muốn vẽ đồ thị. Bây giờ chúng ta chỉ cần để tạo ra các đồ thị cơ sở (các điểm), thêm màu sắc và văn bản cho mỗi loài:
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))
và sau đó thêm các bề mặt:
iris_plot <- add_trace(last_plot = iris_plot,
z = petal_lm_surface,
x = axis_x,
y = axis_y,
type = "surface")
iris_plot