ggplot преобразован в ggplotly Не все диаграммы отображаются в Shiny - PullRequest
1 голос
/ 20 июня 2020

У меня есть 3 графика в раскрывающемся списке с использованием ggplotly [convert from ggplot] "bar", "area", "histogram". в зависимости от выбора соответствующая диаграмма будет отображаться в графической области «rfp» [за раз, я выбираю только один график]. но проблема, с которой я столкнулся, заключается в том, что я не могу видеть первые две диаграммы, «полосу», «область» в зависимости от выбора. только третью диаграмму я могу просматривать как часть графической области на основе выбора. [но пока я использую ggplot, я не сталкивался с этой проблемой]

ui.r

tabPanel('Charts', plotlyOutput("rfp"))

server.r

output$rfp <- renderPlotly({


if ((input$ChartType=="Bar" )){
        SimBar <-ggplot(dataset, aes(x = fct_rev(fct_infreq(dataset[,prd])), y=..count..)) +
        geom_bar(stat="count")
        print(ggplotly(SimBar))}

if ((input$ChartType=="Area" ){
        Area <- ggplot(dataset, aes_string(x=dataset[,prd]))+
        geom_density(stat = "bin", alpha=0.5)
        print(ggplotly(Area))}

if ((input$ChartType=="Histogram" ){
        Hist <- ggplot(dataset, aes((x=dataset[,prd])))+
        geom_histogram (stat = "count")
        print(ggplotly(Hist))}
     }

1 Ответ

1 голос
/ 20 июня 2020

Любой «renderXXX» работает как функция: он возвращает результат последнего оператора своего тела. Здесь ваше последнее утверждение - if(input$ChartType=="Histogram"){ ... }. Это NULL, если input$ChartType не "Histogram". Вы можете сделать следующее:

output$rfp <- renderPlotly({
  if(input$ChartType=="Bar"){
    gg <- ggplot(dataset, aes(x = fct_rev(fct_infreq(dataset[,prd])), y=..count..)) +
      geom_bar(stat="count")
  }else if(input$ChartType=="Area"){
    gg <- ggplot(dataset, aes_string(x=dataset[,prd])) +
      geom_density(stat = "bin", alpha=0.5)
  }else if(input$ChartType=="Histogram"){
    gg <- ggplot(dataset, aes((x=dataset[,prd]))) +
      geom_histogram(stat = "count")
  }
  ggplotly(gg)
}
...