ticks plot_ly libreria dotted r plot ggplot2 shiny plotly

plot_ly - la línea de tendencia lineal de plotly no se actualiza en brillante



plotly r line (1)

El problema es con la funcionalidad add_trace . Debe proporcionarle el eje x para poder trazar correctamente el resultado de la lm .

p <- add_trace(p, y = fitted(l), x = Relative.Time.Progress)

Para ver el problema más claramente, visualice los resultados con todo el conjunto de datos.

p <- plot_ly(df, x=Relative.Time.Progress, y=cumul.ans.keystroke, mode=''markers'', color=KeystrokeRate, size=KeystrokeRate, marker=list(sizeref=100), type=''scatter'') p

l <- lm(cumul.ans.keystroke ~ Relative.Time.Progress, data=df) p <- add_trace(p, y = fitted(l)) p

p <- plot_ly(df, x=Relative.Time.Progress, y=cumul.ans.keystroke, mode=''markers'', color=KeystrokeRate, size=KeystrokeRate, marker=list(sizeref=100), type=''scatter'') l <- lm(cumul.ans.keystroke ~ Relative.Time.Progress, data=df) p <- add_trace(p, y = fitted(l), x = Relative.Time.Progress) p

Como vería, add_trace estaba trazando el fitted(y) correctamente pero usando el eje x para ser c(0:7) . Supongo que es un valor predeterminado pasado a add_trace , pero no he examinado a fondo el "por qué" de esto. El conjunto de datos df tiene ocho puntos. En su lugar, necesitaba dar los valores actuales Relative.Time.Progress en el eje x para trazar correctamente los valores fitted(y) wrt real x . Espero que esto aclare.

Estoy intentando agregar una línea de tendencia lineal a un diagrama de trazado en una aplicación brillante. Cuando cambio los parámetros de selección, veo que los coeficientes del modelo lineal cambian (usando observe(print(summary(l)) . Sin embargo, la línea real en el diagrama parece permanecer en el mismo lugar.

Aquí hay una gráfica, donde la línea de tendencia al menos parece cercana a intersectar los dos puntos:

En otro gráfico, la línea de tendencia no está ni cerca del primer punto:

Aquí hay un ejemplo de trabajo mínimo:

library(dplyr) library(shiny) library(plotly) df <- as.data.frame(list("UserID"=c(1,1,1,1,2,2,2,2), "QuestionID"=c(4,4,5,5,4,4,6,6), "KeystrokeRate"=c(8,4,6,15,8,6,7,8), "cumul.ans.keystroke"=c(1,7,1,5,1,14,1,9), "Relative.Time.Progress"=c(0.1,1.0,0.4,1.0,0.8,1.0,0.8,1.0) )) ui <- (fluidPage( sidebarLayout( sidebarPanel( selectInput("userInput","Select User", sort(unique(df$UserID)), selected = sort(unique(df$UserID))[1]), uiOutput("answerOutput")#, ), mainPanel( plotlyOutput("mainPlot")#, ) ) )) server <- function(input, output, session) { # filter only based on selected user filteredForUser <- reactive({ try( df %>% filter( UserID == input$userInput ), silent=T) }) # filter for both user and answer filteredFull <- reactive({ try ( df %>% filter( UserID == input$userInput, QuestionID == input$answerInput ), silent=T) }) # filter answer choices based on user output$answerOutput <- renderUI({ df.u <- filteredForUser() if(!is.null(df)) { selectInput("answerInput", "Select A Typing Session", sort(unique(df.u$QuestionID))) } }) output$mainPlot <- renderPlotly({ if (class(filteredForUser()) == "try-error" || class(filteredFull()) == "try-error") { return(geom_blank()) } else { # plot scatter points and add trend lines p <- plot_ly(filteredFull(), x=Relative.Time.Progress, y=cumul.ans.keystroke, mode=''markers'', color=KeystrokeRate, size=KeystrokeRate, marker=list(sizeref=100), type=''scatter'') l <- lm(cumul.ans.keystroke ~ Relative.Time.Progress, data=filteredFull()) observe(print(summary(l))) p <- add_trace(p, y= fitted(l)) p } }) } shinyApp(ui, server)