关于 R shiny ggvis plot tooltips and reactivity 的问题
A question about R shiny ggvis plot tooltips and reactivity
我有一个具有全局功能的应用程序,可以制作 ggvis 图。我使用全局函数是因为我多次使用略有不同的设置重新创建绘图。我需要工具提示来响应一些用户输入,但即使反应性强制重新计算绘图,工具提示似乎也不会重新计算。这是问题的示例:
library(shiny)
library(ggvis)
df = mtcars
df$name = row.names(df)
make_plot <- function(data, slider){
hover_values <- function(x) {
gear = data$gear[data$name == x$name]
paste("gear times slider is:", gear*slider)
}
data %>%
ggvis(~mpg, ~hp, key := ~name) %>%
layer_points() %>%
add_tooltip(hover_values, "hover")
}
ui <- fluidPage(
sliderInput("slider", label = "slider:", min = 1, max = 10, value = 1),
ggvisOutput("plot")
)
server <- function(input, output, session) {
output$plot <- eventReactive(input$slider, {
print("remaking plot...")
make_plot(df, input$slider)
}) %>% bind_shiny("plot")
}
shinyApp(ui = ui, server = server)
您可以看到工具提示是使用滑块输入计算的,但是当您 运行 应用程序时,工具提示不会随着滑块的变化而改变。有人可以解释我的方法有什么问题或我需要做什么才能使它正常工作吗?
MrFlick 指出我需要移动到使用 bind_shiny()
的地方。服务器功能的更正代码是:
server <- function(input, output, session) {
output$plot <- eventReactive(input$slider, {
print("remaking plot...")
make_plot(df, input$slider) %>%
bind_shiny("plot")
})
}
我有一个具有全局功能的应用程序,可以制作 ggvis 图。我使用全局函数是因为我多次使用略有不同的设置重新创建绘图。我需要工具提示来响应一些用户输入,但即使反应性强制重新计算绘图,工具提示似乎也不会重新计算。这是问题的示例:
library(shiny)
library(ggvis)
df = mtcars
df$name = row.names(df)
make_plot <- function(data, slider){
hover_values <- function(x) {
gear = data$gear[data$name == x$name]
paste("gear times slider is:", gear*slider)
}
data %>%
ggvis(~mpg, ~hp, key := ~name) %>%
layer_points() %>%
add_tooltip(hover_values, "hover")
}
ui <- fluidPage(
sliderInput("slider", label = "slider:", min = 1, max = 10, value = 1),
ggvisOutput("plot")
)
server <- function(input, output, session) {
output$plot <- eventReactive(input$slider, {
print("remaking plot...")
make_plot(df, input$slider)
}) %>% bind_shiny("plot")
}
shinyApp(ui = ui, server = server)
您可以看到工具提示是使用滑块输入计算的,但是当您 运行 应用程序时,工具提示不会随着滑块的变化而改变。有人可以解释我的方法有什么问题或我需要做什么才能使它正常工作吗?
MrFlick 指出我需要移动到使用 bind_shiny()
的地方。服务器功能的更正代码是:
server <- function(input, output, session) {
output$plot <- eventReactive(input$slider, {
print("remaking plot...")
make_plot(df, input$slider) %>%
bind_shiny("plot")
})
}