【问题标题】:plotly not creating linear trend line情节不创建线性趋势线
【发布时间】:2016-09-10 03:23:55
【问题描述】:

在为散点图创建趋势线时,我使用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

如有必要,我可以添加更多代码,或者尝试制作一个最小的工作示例。但是,我希望这是一个从代码中显而易见的熟悉问题。

【问题讨论】:

  • 按照与您的值相同的顺序排列您输入的数据框。我有同样的问题。它按索引进行跟踪,至少在我的情况下是这样。
  • 我应该对代码的哪一部分进行排序?
  • 我认为按 x 排列然后 y 应该这样做。我不能说这就是问题所在,但考虑到它造成的混乱,它似乎是按照数据中的顺序而不是 x 和 y 值来跟踪点。
  • @Adam_G 你能在哪里解决这个问题?
  • 没有。我尝试在 df 上使用arrange,但没有运气

标签: r plot shiny plotly


【解决方案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")

需要从空的情节开始并添加痕迹。

【讨论】:

    【解决方案2】:

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

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

    filteredFull()df 中的 Relative.Time.Progress 可能不匹配。

    这是一个例子。希望对您有所帮助...

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-27
      • 2014-12-13
      • 1970-01-01
      相关资源
      最近更新 更多