首页 > 解决方案 > Shiny R中的密度图未按预期工作

问题描述

我一直在用闪亮的方式构建我的第一个应用程序,以便发布它们并与我的同事共享交互式图表。目前我一直在制作密度图来绘制行为图。目标是将 1 到 4 个图显示为构面,具体取决于闪亮的“原点”选择和“变量”选择。如果我手动绘制所有 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()

然而,在闪亮中,当您选择“p1”,然后选择“p2”、“p3”或“p4”时,“p1”的图会发生变化(不仅仅是因为比例,形状也会改变)。它发生在任何变量组合中。发生这种情况时,我会收到以下警告:

(variable, input$var)中的警告==.default:较长的对象长度不是较短对象长度的倍数

我不明白问题是什么。变量复选框输入是列出的每种类型的变量,每个变量facet本质上都是一个单独的子图。那么为什么绘制“p2”的密度会对“p1”的密度产生影响。如果有人能为我解决这个问题,那就太好了。

标签: rggplot2shinyreactivefacet

解决方案


我使用提供的数据和 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)

推荐阅读