Shiny R 中的密度图无法按预期工作
Density Plots in Shiny R not working as intended
我一直在用 shiny 构建我的第一个应用程序,以便发布它们并与我的同事共享交互式图表。目前我一直在制作密度图来映射行为。目标是显示 1 到 4 个图作为分面,具体取决于闪亮的“原点”selection 和“变量”selection。如果我手动绘制所有 4 个图表,我会得到类似这样的输出:
sampleplot <- data.frame("origin" = c("US","GB","GB","US","CA","US","GB","GB","US","CA","US","GB","GB","US","CA","US","GB","GB","US","CA"),
"variable" = c("p1","p2","p3","p1","p4","p1","p2","p3","p1","p1","p1","p2","p3","p1","p4","p1","p2","p3","p1","p1"),
"value" = runif(20, min = 0.2, max = 0.8))
sampleplot %>%
ggplot(aes(value, color = origin)) +
facet_wrap(~ variable, ncol = 2) +
geom_density()
但是,在 shiny 中,当您 select“p1”,然后是“p2”、“p3”或“p4”时,“p1”的情节会发生变化(不仅仅是因为比例, 形状改变了)。它发生在变量的任何组合中。发生这种情况时,我会收到一条警告:
==.default
(variable, input$var) 中的警告:
较长的对象长度不是较短对象长度的倍数
我不明白问题出在哪里。变量复选框输入是列出的每种类型的变量,每个 facet
本质上是一个单独的子图。那么为什么绘制“p2”的密度会对“p1”的密度产生影响。如果有人能为我解决这个问题,那就太好了。
我使用提供的数据和 ggplot 调用制作了一个可重现的闪亮应用程序,并且将比例的变化分开,没有什么罕见的事情发生。让我知道是否有帮助。如果您能提供您的应用程序的一些代码,那将会很有帮助,这样我们就能确切地知道您的情节是怎么回事。
示例应用:
library(shiny)
library(tidyverse)
sampleplot <- data.frame("origin" = c("US","GB","GB","US","CA","US","GB","GB","US","CA","US","GB","GB","US","CA","US","GB","GB","US","CA"),
"variable" = c("p1","p2","p3","p1","p4","p1","p2","p3","p1","p1","p1","p2","p3","p1","p4","p1","p2","p3","p1","p1"),
"value" = runif(20, min = 0.2, max = 0.8))
ui <- fluidPage(sidebarLayout(
sidebarPanel(selectInput('selection', "Select sampleplot's variable",choices = unique(sampleplot$variable), multiple = TRUE, selected = 'p1')),
mainPanel(plotOutput('sameplots'))
)
)
server <- function(input, output, session) {
reactive_sameplot <- reactive({
sampleplot %>%
filter(variable %in% input$selection) %>%
ggplot(aes(value, color = origin)) +
facet_wrap(~ variable, ncol = 2) +
geom_density()
})
output$sameplots <- renderPlot({reactive_sameplot()})
}
shinyApp(ui, server)
我一直在用 shiny 构建我的第一个应用程序,以便发布它们并与我的同事共享交互式图表。目前我一直在制作密度图来映射行为。目标是显示 1 到 4 个图作为分面,具体取决于闪亮的“原点”selection 和“变量”selection。如果我手动绘制所有 4 个图表,我会得到类似这样的输出:
sampleplot <- data.frame("origin" = c("US","GB","GB","US","CA","US","GB","GB","US","CA","US","GB","GB","US","CA","US","GB","GB","US","CA"),
"variable" = c("p1","p2","p3","p1","p4","p1","p2","p3","p1","p1","p1","p2","p3","p1","p4","p1","p2","p3","p1","p1"),
"value" = runif(20, min = 0.2, max = 0.8))
sampleplot %>%
ggplot(aes(value, color = origin)) +
facet_wrap(~ variable, ncol = 2) +
geom_density()
但是,在 shiny 中,当您 select“p1”,然后是“p2”、“p3”或“p4”时,“p1”的情节会发生变化(不仅仅是因为比例, 形状改变了)。它发生在变量的任何组合中。发生这种情况时,我会收到一条警告:
==.default
(variable, input$var) 中的警告:
较长的对象长度不是较短对象长度的倍数
我不明白问题出在哪里。变量复选框输入是列出的每种类型的变量,每个 facet
本质上是一个单独的子图。那么为什么绘制“p2”的密度会对“p1”的密度产生影响。如果有人能为我解决这个问题,那就太好了。
我使用提供的数据和 ggplot 调用制作了一个可重现的闪亮应用程序,并且将比例的变化分开,没有什么罕见的事情发生。让我知道是否有帮助。如果您能提供您的应用程序的一些代码,那将会很有帮助,这样我们就能确切地知道您的情节是怎么回事。
示例应用:
library(shiny)
library(tidyverse)
sampleplot <- data.frame("origin" = c("US","GB","GB","US","CA","US","GB","GB","US","CA","US","GB","GB","US","CA","US","GB","GB","US","CA"),
"variable" = c("p1","p2","p3","p1","p4","p1","p2","p3","p1","p1","p1","p2","p3","p1","p4","p1","p2","p3","p1","p1"),
"value" = runif(20, min = 0.2, max = 0.8))
ui <- fluidPage(sidebarLayout(
sidebarPanel(selectInput('selection', "Select sampleplot's variable",choices = unique(sampleplot$variable), multiple = TRUE, selected = 'p1')),
mainPanel(plotOutput('sameplots'))
)
)
server <- function(input, output, session) {
reactive_sameplot <- reactive({
sampleplot %>%
filter(variable %in% input$selection) %>%
ggplot(aes(value, color = origin)) +
facet_wrap(~ variable, ncol = 2) +
geom_density()
})
output$sameplots <- renderPlot({reactive_sameplot()})
}
shinyApp(ui, server)