Интерактивная гистограмма не работает в блестящем - PullRequest
0 голосов
/ 31 мая 2019

Я создал блестящее приложение. Интерактивная столбчатая диаграмма работает неправильно - вместо двух столбцов отображается один столбец. Кроме того, диаграмма не будет обновляться автоматически, если я выберу другие переменные.

Я был бы очень признателен, если бы кто-то мог помочь решить это. Большое спасибо !!

Вот код:

library(shiny)
library(ggplot2)
library(plotly)


a=c("Female","Female","Male","Female","Male")
b=c("Yes","No","No","Yes","No")
c=c("Yes","Yes","Yes","No","No")
Mydata=data.frame(gender=a,SeniorCitizen=b,Churn=c)

ggplot(Mydata)+geom_bar(aes(gender,fill=Churn))+
  ggtitle("Categorical Variable vs Target Variable")+theme(plot.title = element_text(hjust = 0.5))

ui = shinyUI(fluidPage(
  headerPanel(title="Features Review"),
  sidebarPanel(
    selectInput("Variable","Select A Categorical Variable",
                list("gender"="gender","SeniorCitizen"="SeniorCitizen"
                ))),

  mainPanel(
    titlePanel(title="Categorical Variable Visualization"),plotOutput("CPlots"))

  ))


server = shinyServer(function(input, output) {

  output$CPlots = reactivePlot(function(){
    ggplot(Mydata)+geom_bar(aes(input$Variable,fill=Churn))+
      ggtitle("Categorical Variable vs Target Variable")+theme(plot.title = element_text(hjust = 0.5))
  })
})


shinyApp(ui,server)

Ответы [ 2 ]

0 голосов
/ 01 июня 2019

Согласно вашему комментарию и совету @ DSGym, вам нужен следующий код:

library(shiny)
library(ggplot2)
library(plotly)

a = c("Female", "Female", "Male", "Female", "Male")
b = c("No", "No", "No", "Yes", "No")
c = c("Yes", "Yes", "Yes", "No", "No")
Mydata = data.frame(gender = a,
                    SeniorCitizen = b,
                    Churn = c)

ui = shinyUI(fluidPage(
    headerPanel(title = "Features Review"),
    sidebarPanel(selectInput(
        "Variable",
        "Select A Categorical Variable",
        list("gender" = "gender", "SeniorCitizen" = "SeniorCitizen")
    )),

    mainPanel(
        titlePanel(title = "Categorical Variable Visualization"),
        plotOutput("CPlots")
    )

))

server = shinyServer(function(input, output) {
    output$CPlots = renderPlot(
        ggplot(Mydata, aes(
            x = get(input$Variable), fill = Churn
        )) +
            geom_bar() +
            ggtitle("Categorical Variable vs Target Variable") +
            theme(plot.title = element_text(hjust = 0.5))
    )
})

shinyApp(ui, server)
0 голосов
/ 31 мая 2019
library(shiny)
library(ggplot2)
library(plotly)


a=c("Female","Female","Male","Female","Male")
b=c("Yes","No","No","Yes","No")
c=c("Yes","Yes","Yes","No","No")
Mydata=data.frame(gender=a,SeniorCitizen=b,Churn=c)

ggplot(Mydata)+geom_bar(aes(gender,fill=Churn))+
    ggtitle("Categorical Variable vs Target Variable")+theme(plot.title = element_text(hjust = 0.5))

ui = shinyUI(fluidPage(
    headerPanel(title="Features Review"),
    sidebarPanel(
        selectInput("Variable","Select A Categorical Variable", list("gender"="gender","SeniorCitizen"="SeniorCitizen"))),

    mainPanel(
        titlePanel(title="Categorical Variable Visualization"),plotOutput("CPlots"))

))


server = shinyServer(function(input, output) {

    df <- reactive({
        if(input$Variable == "SeniorCitizen") {
            data <- Mydata %>%
                filter(SeniorCitizen == "Yes")
            return(data)
        } else {
            data <- Mydata
            return(data)
        }
    })

    output$CPlots = renderPlot({

        ggplot(data=df(), aes(x = Churn, y = input$Variable,fill=Churn)) +
            geom_bar(stat="identity", color="black") +
            theme_minimal() + 
            ggtitle("Categorical Variable vs Target Variable")+theme(plot.title = element_text(hjust = 0.5))

    })
})


shinyApp(ui,server)

Это работает, но ваш график не изменит ничего, кроме категорий на оси у, потому что geom_bar считает только переменную на группу. Может быть, вы хотите что-то фильтровать? Я предоставил вам некоторый код, где вы можете увидеть изменения при изменении selectInput.

...