2016-05-13 7 views
1

Beim Erstellen einer Trendlinie für ein Streudiagramm verwende ich add_trace, um eine lineare Trendlinie hinzuzufügen.plotly erstellt keine lineare Trendlinie

Wenn die Daten nur eine "Reihe" von Daten haben, d. H. Es gibt nur eine Gruppe von Koordinaten, funktioniert der folgende Code gut. Allerdings, wenn ich eine Reihe von Serien, die „Trendlinie“ sieht wie folgt vorstellen: enter image description here

Hier ist der relevante Teil des Codes ist:

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 

ich mehr Code hinzufügen kann, oder versuchen, mache ein minimales Arbeitsbeispiel, falls nötig. Ich hoffe jedoch, dass dies ein familiäres Problem ist, das aus dem Code ersichtlich ist.

+0

Ordnen Sie den Datenrahmen, den Sie einspeisen, in der gleichen Reihenfolge wie Ihre Werte an. Ich hatte das gleiche Problem. Es führt nach Index, zumindest in meinem Fall. – Gopala

+0

Welchen Teil des Codes soll ich sortieren? –

+0

Anordnen von x und dann sollte ich es tun, denke ich. Ich kann nicht sagen, dass das das Problem hier ist, aber angesichts der Unordnung, die es zeichnet, scheint es, dass es Punkte in einer Reihenfolge abfährt, die in den Daten ist, im Gegensatz zu x- und y-Werten. – Gopala

Antwort

1

Ich denke, Sie müssen das data = ... Argument in add_trace(p, y=fitted(lm.all), x=Relative.Time.Progress, mode='lines') angeben.

Die erste Kurve scheint eine Teilmenge zu sein, aber die zweite Kurve verwendet die angepassten Regressionswerte, die durch Anpassung eines Regressionsmodells an den gesamten Datensatz erhalten werden.

Es kann eine Abweichung zwischen Relative.Time.Progress in vs df geben.

Hier ist ein Beispiel. Hoffentlich hilft ...

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

Schön! Vielen Dank! –

0

Es ist nun ein wenig verändert, sollte der folgende Code funktionieren:

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

Brauchen mit leeren zu beginnen plotten und Spuren hinzufügen.