r语言 - 如何在RShiny中显示基于ifelse条件的单个plot ?



我必须根据用户选择显示单个绘图。如果用户选择两个连续变量,则输出为散点图。如果用户选择一个分类变量和一个连续变量,则输出是一个箱线图。

由于某些原因,我的箱线图显示,但散点图不显示。相反,R Shiny尝试使用箱线图显示两个连续变量,并给了我这个错误:警告:连续x美学—您是否忘记aes(group=…)?

我的代码如下:

ui <- fluidPage(
#1. Select 1 of many continuous variables as y-variable 
selectInput("y_varb", label="Y-axis variable",choices=names(data)[c(-1,-2,-14,-15,-16,-17)]),

#2 Select any variable in dataset as x-variable
selectInput("x_varb", label="X-axis variable", choices=names(data)),


#3. Reset plot1 output after each selection
plotOutput("plot", dblclick = "plot_reset")

)
server <- function(input, output) {

remaining <- reactive({
names(data)[-match(input$y_varb,names(data))]
})

observeEvent(remaining(),{
choices <- remaining()
updateSelectInput(session = getDefaultReactiveDomain(),inputId = "x_varb", choices = choices)
})

output$plot <- renderPlot({
ggp1 <- ggplot(data, aes_string(input$x_varb, input$y_varb)) + geom_point()  
ggp2 <- ggplot(data, aes_string(input$x_varb, input$y_varb)) + stat_boxplot()

if(is.factor(input$x_varb)){ggp1} else {ggp2}
})

}
  • input$x_varb总是字符。您要检查的是data[[input$x_varb]]的等级。
  • 不要为每个选择创建两个绘图,使用if/else只创建必要的绘图。
  • aes_string不支持在aes中使用.data作为字符串传递列名。
  • 最后,剧情应该相反吗?我的意思是当x_varb是因子时使用stat_boxplot,当它不是因子时使用geom_point?

你可以试试-

output$plot <- renderPlot({
if(is.factor(data[[input$x_varb]])) {
plot <- ggplot(data, aes(.data[[input$x_varb]], .data[[input$y_varb]])) + stat_boxplot()
} else {
plot <- ggplot(data, aes(.data[[input$x_varb]], .data[[input$y_varb]])) + geom_point()  
}
plot
})

最新更新