![](/img/trans.png)
[英]`scatterplot3d`: can not add a regression plane to 3D scatter plot
[英]Add Regression Plane to 3d Scatter Plot in Plotly
我希望利用 Plotly 中的出色功能,但我很難弄清楚如何將回歸平面添加到 3d 散點圖。 這是一個如何開始使用 3d 繪圖的示例,有人知道如何進行下一步並添加平面嗎?
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)
您需要根據從lm
調用創建的預測對象對點進行采樣。 這將創建一個類似於火山對象的表面,然后您可以將其添加到您的繪圖中。
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, # EDIT: ~ added
type = "scatter3d",
mode = "markers",
marker = list(color = hcolors))
然后添加曲面:
iris_plot <- add_trace(p = iris_plot,
z = petal_lm_surface,
x = axis_x,
y = axis_y,
type = "surface")
iris_plot
用這個替換代碼的繪圖部分,也修復了錯誤:
attach(my_df)
iris_plot <- plot_ly(my_df,
x = ~Sepal.Length,
y = ~Sepal.Width,
z = ~Petal.Length,
text = Species,
type = "scatter3d",
color = ~Species,
colors = c("red","blue","green"),
mode = "markers")
我執行了代碼,但出現錯誤,我在text = "Species"
時更正了它,是的,它正確執行了
我使用了相同的代碼,但是當我運行最后一步以獲取表面時收到此錯誤消息:
traces[[i]][[obj]] 中的錯誤:嘗試在 get1index 中選擇少於一個元素
所以我在“add_trace”中添加了一個術語:
繼承 = F
最后。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.