Я хочу, чтобы пользователь манипулировал слайдером, чтобы ответить на вопрос.Чтобы проверить, верны ли они, ползунок переместится к правильному ответу после нажатия кнопки «Проверить».Круговая диаграмма будет двигаться одновременно.Я думаю, что это может быть возможно при использовании Shiny с параметрами анимации слайдера.Однако я не знаю, как включать и выключать анимацию программно.Или, если есть возможность уменьшить значение ползунка - например, перейти с 80% до 60%.
Вы можете смоделировать желаемое поведение, запустив приведенный ниже код.Слайдер начинается с 60. Нажмите play и нажмите pause, когда слайдер достигнет 80. Как можно программно сделать то же самое?т.е. нажмите кнопку «Проверить», и круговая часть автоматически увеличится с 40% до 60%.
library(shiny)
library(ggplot2)
library(scales)
ui <- fluidPage(
# App title ----
titlePanel("How Many Canadians Speak French?"),
# Sidebar layout with input and output definitions ----
sidebarLayout(
# Sidebar to demonstrate various slider options ----
sidebarPanel(
# Size of slice A, B is determined automagically
sliderInput("per_a", "Percent French Speaking",
min = 0, max = 100,
value = 60, step = 1,
animate = animationOptions(interval = 300, loop = TRUE)),
actionButton(
inputId = "check",
label = "Check"
)
),
# Main panel for displaying outputs ----
mainPanel(
plotOutput(outputId = "pieChart")
)
)
)
# Define server logic for slider examples ----
server <- function(input, output, session) {
df <- data.frame(
group = c("English", "French"),
value = c(40, 60)
)
# Functions
draw_plot <- function(df) {
bp <- ggplot(df, aes(x = "", y = value, fill = group)) +
geom_bar(width = 1, size = 1, color = "grey23", stat = "identity")
pie <- bp + coord_polar("y", start = 0)
pie +
theme(axis.text.x = element_blank(),
axis.title.x = element_blank(),
axis.title.y = element_blank(),
panel.border = element_blank(),
panel.grid = element_blank(),
legend.position = "none",
axis.ticks = element_blank(),
plot.title = element_text(size = 19, face = "bold")) +
geom_text(aes(label = paste0(round(value), "% ", c("English", "French"))),
position = position_stack(vjust = 0.5),
color = "white", size = 6) +
labs(x = NULL, y = NULL, title = "") +
scale_fill_manual(values = c("red4", "#003399")) # Pie chart colours: English, French
}
output$pieChart <- renderPlot({
df$value[2] <- input$per_a
df$value[1] <- 100 - input$per_a
draw_plot(df)
})
observeEvent(input$check, {
# Insert code here that starts the slider animation at current value and stops it at 80
})
}
shinyApp(ui, server)