在为散点图创建趋势线时,我使用add_trace
添加线性趋势线。
当数据只有一个“系列”数据时,即只有一组坐标时,下面的代码工作正常。但是,当我介绍一些系列时,“趋势线”看起来像这样:
以下是代码的相关部分:
p <- plot_ly(filteredFull(), x=Relative.Time.Progress, y=cumul.ans.keystroke,
mode='markers', color=KeystrokeRate, size=KeystrokeRate,
marker=list(sizeref=100), type='scatter',
hoverinfo='text', text=paste("token: ",Token, "Keystrokes: ",
KeystrokeCount)) %>%
layout(
xaxis=list(range=c(0,1)),
yaxis=list(range=c(0,max(filteredFull()$cumul.ans.keystroke)))
)
lm.all <- lm(cumul.ans.keystroke ~ Relative.Time.Progress,
data=df)
observe(print(summary(lm.all)))
p <- add_trace(p, y=fitted(lm.all), x=Relative.Time.Progress,
mode='lines') %>%
layout(
xaxis= list(range = c(0,1))
)
p
我可以添加更多代码,或者在必要时尝试制作一个最小的工作示例。但是,我希望这是一个从代码中可以看出的家族问题。
答案 0 :(得分:1)
我认为您需要在data = ...
中指定add_trace(p, y=fitted(lm.all), x=Relative.Time.Progress, mode='lines')
参数。
第一条迹线似乎是一个子集,但第二条迹线使用回归拟合值,这些值是通过将回归模型拟合到整个数据集而获得的。
Relative.Time.Progress
与filteredFull()
中df
之间可能存在不匹配。
这是一个例子。希望有帮助...
library(plotly)
df <- diamonds[sample(1:nrow(diamonds), size = 500),]
fit <- lm(price ~ carat, data = df)
df1 <- df %>% filter(cut == "Ideal")
plot_ly(df1, x = carat, y = price, mode = "markers") %>%
add_trace(x = carat, y = fitted(fit), mode = "lines")
plot_ly(df1, x = carat, y = price, mode = "markers") %>%
add_trace(data = df, x = carat, y = fitted(fit), mode = "lines")
答案 1 :(得分:1)
现在改了一下,以下代码应该可以正常工作:
df <- diamonds[sample(1:nrow(diamonds), size = 500),]
fit <- lm(price ~ carat, data = df)
df1 <- df %>% filter(cut == "Ideal")
plot_ly() %>%
add_trace(data = df1, x = ~carat, y = ~price, mode = "markers") %>%
add_trace(data = df, x = ~carat, y = fitted(fit), mode = "lines")
需要以空的方式开始并添加痕迹。