Я пишу блестящее приложение, которое регулирует количество разброса на графике.Данные генерируются через rnorm()
.Я отображаю график с ggplot2
.Я хочу показать или скрыть линию регрессии на основе значения флажка.Это все работает.
Однако всякий раз, когда я показываю или скрываю линию регрессии (без изменения количества ошибок), данные восстанавливаются, что мне не нужно.У меня есть данные в реактивной функции, надеюсь, что это решит проблему, но это не так.
Я пытался использовать как geom_smooth
, так и geom_abline
(закомментировано в коде), но обазаставить данные быть восстановленными.
Вопрос: Можно ли добавить / удалить линию регрессии без изменения данных? То есть расположение точек должно меняться только при смене ползунка, но не флажка.
library(shiny)
library(ggplot2)
set.seed(42)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
sliderInput("stdev",
"Amount of error:",
min = 0,
max = 0.8,
value = 0.34),
checkboxInput("showLM", "Show regression line?",
value = TRUE)
),
mainPanel(
plotOutput("regrPlot")
)
)
)
# Define server logic required to draw a histogram
server <- function(input, output) {
output$regrPlot <- renderPlot({
regrData <- reactive({
pl <- rnorm(50, mean = 4.3, sd = 0.44)
error <- rnorm(length(pl), 0, input$stdev)
sl <- 2.41 + (0.828 * pl) + error
tibble(pl, sl)
})
# For use with abline
coefs <- lm(sl ~ pl, data = regrData())$coefficients
p1 <- ggplot(data = regrData(), aes(x = pl, y = sl)) +
geom_point()
# Try with geom_abline
# p2 <- {if (input$showLM) p1 +
# geom_abline(slope = coefs[2],
# intercept = coefs[1])
# else p1}
p2 <- {if (input$showLM)
p1 + geom_smooth(method = "lm",
se = FALSE)
else p1}
print(p2)
})
}
# Run the application
shinyApp(ui = ui, server = server)
Создан 2019-01-23 с помощью пакета Представить (v0.2.1)