情节并非创造线性趋势线

时间:2016-05-13 19:51:04

标签: r plot shiny plotly

在为散点图创建趋势线时,我使用add_trace添加线性趋势线。

当数据只有一个“系列”数据时,即只有一组坐标时,下面的代码工作正常。但是,当我介绍一些系列时,“趋势线”看起来像这样: enter image description here

以下是代码的相关部分:

    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

我可以添加更多代码,或者在必要时尝试制作一个最小的工作示例。但是,我希望这是一个从代码中可以看出的家族问题。

2 个答案:

答案 0 :(得分:1)

我认为您需要在data = ...中指定add_trace(p, y=fitted(lm.all), x=Relative.Time.Progress, mode='lines')参数。

第一条迹线似乎是一个子集,但第二条迹线使用回归拟合值,这些值是通过将回归模型拟合到整个数据集而获得的。

Relative.Time.ProgressfilteredFull()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")

enter image description here

plot_ly(df1, x = carat, y = price, mode = "markers") %>% 
  add_trace(data = df, x = carat, y = fitted(fit), mode = "lines")

enter image description here

答案 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")

需要以空的方式开始并添加痕迹。