[英]develop reactive scatter plot using shiny in R
我有四个变量的 10 年数据。 这是数据的样子
dat <- data.frame(year = rep(2001:2010, each = 50),
a = rnorm(50), b = rnorm(50), c = rnorm(50), d = rnorm(50))
dat_l <- tidyr::gather(dat, variable, value, a:d)
我正在尝试学习 shiny 应用程序。 I want my app to plot one variable against the other for a given year For eg if user selects a
and b
and year 2001, plot a
against b
for a year 2001. If b
and c
are selected for year 2003, plot b
vs c
2003 年等等。 如果为给定年份选择了单个变量或超过 2 个变量,也不要执行任何操作。
library(shiny)
u <- fluidPage(
titlePanel('My analytics'),
sidebarLayout(position = 'left',
sidebarPanel(
checkboxInput('a', 'aRef', value = F),
checkboxInput('b', 'bRef', value = F),
checkboxInput('c', 'cRef', value = F),
checkboxInput('d', 'dRef', value = F),
sliderInput('yearRef','Select Year',min=2001,max=2010,value=1)
),
mainPanel(
tabsetPanel(
tabPanel('Scatter', plotOutput(outputId = 'scatter'))
)
)
)
)
s <- shinyServer(function(input, output)
{
pt1 <- reactive({
if (!input$a) return(NULL)
pdata <- dplyr::filter(dat_l, variable == input$a and year == input$yearRef)
plot(pdata$value, pdata$value)
})
output$scatter = renderPlot({pt1})
})
shinyApp(u,s)
这段代码不完整,我希望我能得到一些关于如何开发代码的服务器部分的帮助。
我将服务器代码更新为您想要的。
pt1
应该要求您过滤数据以防止出现警告。
input$a
不返回“a”,而是返回TRUE
- 因此要过滤 a,您可以包含类似于向量的内容,其中包含您的复选框选项 a、b、c 以及 d 和基于输入的子集(见下文)。 它还检查以确保只选择了 2 个复选框(总和为 2)。 根据您的需要,这一切都可以简化。 您可能希望包含一个checkboxGroupInput
,而不是返回一个选择的字符向量。
由于您可以为 a 到 d 组合多个复选框,因此请使用%in%
而不是==
。
output$scatter
将通过调用反应式 function pt1
来获取过滤后的数据。 它将确定子集数据中存在哪些 2 个变量,以及 plot 1 与其他变量。
希望这会有所帮助。
s <- function(input, output) {
pt1 <- reactive({
req(input$yearRef)
if (sum(input$a, input$b, input$c, input$d) == 2) {
dplyr::filter(dat_l, variable %in% c("a"[input$a], "b"[input$b], "c"[input$c], "d"[input$d]) &
year == input$yearRef)
} else {
return(NULL)
}
})
output$scatter = renderPlot({
pdata <- pt1()
pvars <- unique(pdata$variable)
if (!is.null(pdata)) {
plot(pdata[pdata$variable == pvars[1], ]$value,
pdata[pdata$variable == pvars[2], ]$value,
xlab = pvars[1], ylab = pvars[2])
}
})
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.