カテゴリファクタ(私の場合は性別)の2つのレベルの2つの回帰直線を持つ散布図を作成する必要があります。散布図はすべての観測値を持つ必要がありますが、各レベルの線形モデルは別々にプロットする必要があります。つまり、次のモデルの散布図:R plot_ly連続的な相互作用散布図色と記号の回帰直線
continuousA = intercept + continuousB + categorical + continuousB * categorical。
add_lines()およびadd_ribbons()が削除されない限り、Plotlyはadd_markers()で指定された色を登録しません。 Plotly(バグ?)でこれを行うことができない場合、ggplot(とおそらくGGally)を使って行うことができますか?
また、もっと短く、よりきめ細やかな、よりきれいなコードで、または関数でこれを行うことができますか?一度に3つのアイリスをすべて種にする方が良いでしょう。
library(plotly)
library(broom)
plot_ly() %>%
add_lines(data = iris[which(iris$Species=='versicolor'), ],
y = ~fitted(lm(data = iris[which(iris$Species=='versicolor'), ], Petal.Width ~ Petal.Length)),
x = ~Petal.Length,
line = list(color = "red"),
name = "Versicolor") %>%
# Plot the 95% CI of slope ribbon
add_ribbons(data = augment(lm(data = iris[which(iris$Species=='versicolor'), ], Petal.Width ~ Petal.Length)),
y = ~Petal.Width,
x = ~Petal.Length,
ymin = ~.fitted - 1.96 * .se.fit,
ymax = ~.fitted + 1.96 * .se.fit,
line = list(color = 'rgba(255, 255, 255, 0.05)'), #get rid of the border line
fillcolor = 'rgba(255, 0, 0, 0.1)', #red with alpha transparency
name = "Versicolor (Standard Error)",
showlegend = FALSE) %>%
add_lines(data = iris[which(iris$Species=='virginica'), ],
y = ~fitted(lm(data = iris[which(iris$Species=='virginica'), ], Petal.Width ~ Petal.Length)),
x = ~Petal.Length,
line = list(color = "green", dash = "dash"),
name = "Viginica") %>%
add_ribbons(data = augment(lm(data = iris[which(iris$Species=='virginica'), ], Petal.Width ~ Petal.Length)),
y = ~Petal.Width,
x = ~Petal.Length,
ymin = ~.fitted - 1.96 * .se.fit,
ymax = ~.fitted + 1.96 * .se.fit,
line = list(color = 'rgba(255, 255, 255, 0.05)'), #get rid of the border line
fillcolor = 'rgba(0, 255, 0, 0.1)', #green with alpha transparency
name = "Virginica (Standard Error)",
showlegend = FALSE) %>%
add_markers(data = iris[which(iris$Species=='versicolor' | iris$Species=='virginica'), ],
x = ~Petal.Length,
y = ~Petal.Width,
symbol = ~Species,
color = ~Species, colors = c("versicolor" = "red", "virginica" = "green")) %>%
layout(xaxis = list(title = "Petal Length"), yaxis = list(title = "Petal Width"))
これは美しいです。ありがとうございました! –