2016-05-13 141 views
1

在爲散點圖創建趨勢線時,我使用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 

我可以添加更多的代碼,或嘗試如果有必要,做一個最小的工作示例。但是,我希望這是一個從代碼中顯而易見的家族問題。

+0

以與您的值相同的順序排列您所餵養的數據框。我有同樣的問題。它通過索引進行追蹤,至少在我的情況下是這樣。 – Gopala

+0

我應該對哪部分代碼進行排序? –

+0

按x安排,然後y應該這樣做我想。我不能說這是這裏的問題,但考慮到它引起的混亂,它似乎是以數據中的順序跟蹤點,而不是x和y值。 – Gopala

回答

1

我想你需要在add_trace(p, y=fitted(lm.all), x=Relative.Time.Progress, mode='lines')中指定data = ...參數。

第一條曲線似乎是一個子集,但第二條曲線使用通過擬合迴歸模型到整個數據集獲得的迴歸擬合值。

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

+0

不錯!謝謝! –

0

現在改了一下,下面的代碼應該很好地工作:

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

需要先從空積極地添加痕跡。