R shiny ggvis 工具提示不会用新数据更新信息,即使情节更新
R shiny ggvis tooltip will not update information with new data, even though plot updates
所以我在闪亮的应用程序中有一个 ggvis 图,它是一个直方图,当用户将鼠标悬停在容器上时,它会显示容器中的观察计数。数据是随机生成的,用户可以点击一个按钮来采样新的一批数据。一切正常,除了在对新的一批数据进行采样和绘制后,工具提示仍然显示原始数据中每个 bin 中的计数,这当然与当前数据不匹配。有没有办法来解决这个问题?下面是我最小的可重现示例。
toolTipFunc <- function(value) {
function(y) {
if (is.null(y)) return(NULL)
else {
length(value[(value >= y$xmin_) & (value < y$xmax_)])
}
}
}
library(shiny)
library(ggvis)
runApp(list(
ui = pageWithSidebar(
div(),
sidebarPanel(
actionButton("sampleButton", "Sample")),
mainPanel(
ggvisOutput("plot"))),
server = function(input, output) {
sampleInput <- reactive({
input$sampleButton
x <- rnorm(500,0,1.5)
data.frame(x)
})
gv <- reactive({
df <- sampleInput()
df %>% ggvis(~x) %>%
add_tooltip(toolTipFunc(df$x), "hover") %>%
layer_histograms(width=0.5) %>%
set_options(width=540,height=350,keep_aspect=TRUE)
})
gv %>% bind_shiny("plot")
}))
在 google ggvis 组 here 上有一个可行的解决方案。本质上,您不需要冗长的、单独的 tool_tip
函数。如果使用默认值 stack = TRUE
,您可以只使用以下内容
gv <- reactive({
df <- sampleInput()
df %>% ggvis(~x) %>%
layer_histograms(width=0.5) %>%
add_tooltip(function(df){ df$stack_upr_ - df$stack_lwr_}) %>%
set_options(width=540,height=350,keep_aspect=TRUE)
})
或者如果stack=FALSE
gv <- reactive({
df <- sampleInput()
df %>% ggvis(~x) %>%
layer_histograms(width=0.5, stack=FALSE) %>%
add_tooltip(function(df){ df$count_}) %>%
set_options(width=540,height=350,keep_aspect=TRUE)
})
所以我在闪亮的应用程序中有一个 ggvis 图,它是一个直方图,当用户将鼠标悬停在容器上时,它会显示容器中的观察计数。数据是随机生成的,用户可以点击一个按钮来采样新的一批数据。一切正常,除了在对新的一批数据进行采样和绘制后,工具提示仍然显示原始数据中每个 bin 中的计数,这当然与当前数据不匹配。有没有办法来解决这个问题?下面是我最小的可重现示例。
toolTipFunc <- function(value) {
function(y) {
if (is.null(y)) return(NULL)
else {
length(value[(value >= y$xmin_) & (value < y$xmax_)])
}
}
}
library(shiny)
library(ggvis)
runApp(list(
ui = pageWithSidebar(
div(),
sidebarPanel(
actionButton("sampleButton", "Sample")),
mainPanel(
ggvisOutput("plot"))),
server = function(input, output) {
sampleInput <- reactive({
input$sampleButton
x <- rnorm(500,0,1.5)
data.frame(x)
})
gv <- reactive({
df <- sampleInput()
df %>% ggvis(~x) %>%
add_tooltip(toolTipFunc(df$x), "hover") %>%
layer_histograms(width=0.5) %>%
set_options(width=540,height=350,keep_aspect=TRUE)
})
gv %>% bind_shiny("plot")
}))
在 google ggvis 组 here 上有一个可行的解决方案。本质上,您不需要冗长的、单独的 tool_tip
函数。如果使用默认值 stack = TRUE
gv <- reactive({
df <- sampleInput()
df %>% ggvis(~x) %>%
layer_histograms(width=0.5) %>%
add_tooltip(function(df){ df$stack_upr_ - df$stack_lwr_}) %>%
set_options(width=540,height=350,keep_aspect=TRUE)
})
或者如果stack=FALSE
gv <- reactive({
df <- sampleInput()
df %>% ggvis(~x) %>%
layer_histograms(width=0.5, stack=FALSE) %>%
add_tooltip(function(df){ df$count_}) %>%
set_options(width=540,height=350,keep_aspect=TRUE)
})