我使用Shiny和ggplot2创建了一个交互式图。我在有4个绘图的地方使用radioButtons,并通过为2个radioButtons中的每一个选择两个可能的按钮之一来打印图形(年龄/性别)。
ui <- fluidPage(
titlePanel(title=h3("Life", align="center")),
sidebarPanel(
radioButtons('gender', "Choose Gender:", choices = c('Males' = 'm', 'Females' ='f')),
radioButtons('age', "Choose Age:", choices = c('At birth' = 'b', 'At Age 65' ='s'))),
mainPanel(plotOutput("plot2"))
)
。 服务器<-功能(输入,输出){
output$plot2<-renderPlot({
if (input$gender == 'f' & input$age == 'b') {
ggplot(df, aes(x = year, y = value, group = variable, color=variable)) + ...
为了打印第二个:
if (input$gender == 'm' & input$age == 'b')
{
ggplot() ...}
为了打印第三个图:
if (input$gender == 'm' & input$age == 's')
{ ggplot ...}
为了打印4个图:
if (input$gender == 'm' & input$age == 's')
{etc.... }
每个图都有4个数据框,没有光泽的图效果很好。
我的问题是,闪亮的ui仅显示最后一个图,对于其他3个,输出为空白?
我做错了什么?
答案 0 :(得分:1)
您必须使用else if
:
output$plot2 <- renderPlot({
if (input$gender == 'f' && input$age == 'b') {
ggplot(df, aes(x = year, y = value, group = variable, color=variable)) + ...
} else if (input$gender == 'm' && input$age == 'b') {
ggplot() ...
} else if ....
})
否则,您的表达式仅返回最后一个if
,如果不满足条件,则返回NULL
。