ggvis plot 消失,工具提示和 checkBoxInput 闪亮
ggvis plot disappears with tooltip and checkBoxInput Shiny
我在 Shiny 应用程序的 ggvis 中使用工具提示时遇到问题。我想在 ggvis 中使用关于点的附加信息,这就是为什么我创建需要 id
变量的函数:
add_info <- function(x) {
if(is.null(x)) return(NULL)
if (is.null(x$id)) return(NULL)
df2<- isolate(data)
df <- df2[df2$id == x$id, ]
paste0(df$info,
df$number)
}
当我在 Shiny 应用程序中使用复选框按钮时出现问题,即当我取消单击所有按钮时,出现错误:
Error in eval(substitute(expr), envir, enclos) :
wrong result size (2), expected 0 or 1
我知道这是因为我的过滤条件排除了所有数据。但在那种情况下,当我取消单击所有复选框选项时,我想看到一个空图(如下面的线图所示)。怎么做?
ui.R
library(shiny)
shinyUI(fluidPage(
titlePanel(""),
sidebarLayout(
sidebarPanel(
wellPanel(checkboxGroupInput("variable",label = "",
choices = list("a","b","c","d"),
selected = c("a"))),
br(),br(),br(),br(),br(),br(),br(),br(),
wellPanel(checkboxGroupInput("variable2",label = "",
choices = list("a","b","c","d"),
selected = c("a")))
),
mainPanel(
ggvisOutput("scatter_plot"),
ggvisOutput("line_plot")
)
)
))
server.R
library(shiny)
shinyServer(function(input, output) {
dataset <- reactive({
df <- df1 %>%
filter(name %in% input$variable)
df
})
data <- reactive({
dataset() %>%
mutate(id = 1:n())
})
vis2 <- reactive({
add_info <- function(x) {
if(is.null(x)) return(NULL)
if (is.null(x$id)) return(NULL)
df2 <- isolate(data())
df <- df2[df2$id == x$id, ]
paste0(df$info,"<br>",
df$number)
}
data() %>%
ggvis(~number2, ~number, fill = ~name) %>%
layer_points(size := 100,
size.hover := 240,
key := ~id) %>%
add_tooltip(add_info,"hover")
})
vis2 %>% bind_shiny("scatter_plot")
# LinePlot
dataset_line <- reactive({
df_line <- df1 %>%
filter(name %in% input$variable2)
})
vis <- reactive({
dataset_line() %>%
ggvis(~number2, ~number, stroke = ~name) %>%
layer_lines()
})
vis %>% bind_shiny("line_plot")
})
global.R
df1 <- data.frame(name = rep(letters[1:4],each = 5), number = df1_number, number2 = df1_number2,
info = "info")
df1_number <-sample(seq(1,20,0.01),20,replace = T)
df1_number2 <-sample(seq(1,5,0.01),20,replace = T)
您的错误实际上来自您的 dplyr
mutate
调用。当您尝试在没有行(即空数据集)时使用 n()
进行计数时,会返回该错误。这会阻止它创建 id
变量并导致 ggvis
出现下游问题。要解决此问题,您需要做的就是将 1:n()
更改为 row_number()
(感谢@docendodiscimus 的建议)。要合并,请删除 dataset
语句并仅使用以下内容:
data <- reactive({
df1 %>%
filter(name %in% input$variable) %>%
mutate(id = row_number())
})
这应该可以解决您的问题。
这里有一个工作要点作为例子。
runGist("https://gist.github.com/cdeterman/806f51c254c523f88f01")
我在 Shiny 应用程序的 ggvis 中使用工具提示时遇到问题。我想在 ggvis 中使用关于点的附加信息,这就是为什么我创建需要 id
变量的函数:
add_info <- function(x) {
if(is.null(x)) return(NULL)
if (is.null(x$id)) return(NULL)
df2<- isolate(data)
df <- df2[df2$id == x$id, ]
paste0(df$info,
df$number)
}
当我在 Shiny 应用程序中使用复选框按钮时出现问题,即当我取消单击所有按钮时,出现错误:
Error in eval(substitute(expr), envir, enclos) :
wrong result size (2), expected 0 or 1
我知道这是因为我的过滤条件排除了所有数据。但在那种情况下,当我取消单击所有复选框选项时,我想看到一个空图(如下面的线图所示)。怎么做?
ui.R
library(shiny)
shinyUI(fluidPage(
titlePanel(""),
sidebarLayout(
sidebarPanel(
wellPanel(checkboxGroupInput("variable",label = "",
choices = list("a","b","c","d"),
selected = c("a"))),
br(),br(),br(),br(),br(),br(),br(),br(),
wellPanel(checkboxGroupInput("variable2",label = "",
choices = list("a","b","c","d"),
selected = c("a")))
),
mainPanel(
ggvisOutput("scatter_plot"),
ggvisOutput("line_plot")
)
)
))
server.R
library(shiny)
shinyServer(function(input, output) {
dataset <- reactive({
df <- df1 %>%
filter(name %in% input$variable)
df
})
data <- reactive({
dataset() %>%
mutate(id = 1:n())
})
vis2 <- reactive({
add_info <- function(x) {
if(is.null(x)) return(NULL)
if (is.null(x$id)) return(NULL)
df2 <- isolate(data())
df <- df2[df2$id == x$id, ]
paste0(df$info,"<br>",
df$number)
}
data() %>%
ggvis(~number2, ~number, fill = ~name) %>%
layer_points(size := 100,
size.hover := 240,
key := ~id) %>%
add_tooltip(add_info,"hover")
})
vis2 %>% bind_shiny("scatter_plot")
# LinePlot
dataset_line <- reactive({
df_line <- df1 %>%
filter(name %in% input$variable2)
})
vis <- reactive({
dataset_line() %>%
ggvis(~number2, ~number, stroke = ~name) %>%
layer_lines()
})
vis %>% bind_shiny("line_plot")
})
global.R
df1 <- data.frame(name = rep(letters[1:4],each = 5), number = df1_number, number2 = df1_number2,
info = "info")
df1_number <-sample(seq(1,20,0.01),20,replace = T)
df1_number2 <-sample(seq(1,5,0.01),20,replace = T)
您的错误实际上来自您的 dplyr
mutate
调用。当您尝试在没有行(即空数据集)时使用 n()
进行计数时,会返回该错误。这会阻止它创建 id
变量并导致 ggvis
出现下游问题。要解决此问题,您需要做的就是将 1:n()
更改为 row_number()
(感谢@docendodiscimus 的建议)。要合并,请删除 dataset
语句并仅使用以下内容:
data <- reactive({
df1 %>%
filter(name %in% input$variable) %>%
mutate(id = row_number())
})
这应该可以解决您的问题。
这里有一个工作要点作为例子。
runGist("https://gist.github.com/cdeterman/806f51c254c523f88f01")