2016-01-22 2 views
0

Я пытаюсь создать свое первое блестящее приложение, которое позволяет пользователям исследовать различные типы нарушений парковки в Копенгагене. Но у меня возникают трудности Подменят данные, которые будут plottet на основе пользовательского ввода - в основном я пытаюсь создать интерактивную версию сюжета ниже, где пользователь может выбрать TYPE_1, type_2 и т.д.Подмножество данных в Shiny для создания интерактивного ggplot barchart

#example data 
df <- data.frame(c('a', 'b', 'c', 'd', 'e', 'f', 'g'), c(rep_len(55, 5), 0, 44),c(rep_len(12, 5), 6, 6), c(0, 2, 0, 3, 0, 7, 8), c(0, 0, 4, 0, 8, 5, 3), c(5, 0, 6, 0, 11,12, 9)) 
names(df) <- c("street", "type_1", "type_2", "type_3", "type_4", "type_5") 

#Example of static plot that i'm trying to make interactive 
ggplot(subset(df, type_5 > 5))+geom_bar(aes(x=reorder(street,type_5), y=type_5),stat = "identity")+coord_flip()+xlab("Streetname") 

enter image description here

My ui.R и server.R следующие. Мои исходные данные имеет более 2000 названия улиц, поэтому я пытаюсь подмножество данных для включения только нарушения стоянки type_x> некоторые Treshold

# Define the overall UI 
ui <- shinyUI(

# Use a fluid Bootstrap layout 
fluidPage( 

# Give the page a title 
titlePanel("Parking violations"), 

# Generate a row with a sidebar 
sidebarLayout(  

    # Define the sidebar with one input 
    sidebarPanel(
    selectInput("type", "Type of violation:", 
       choices=colnames(df), selected = "type_1"), 
    hr(), 
    helpText("Data from Parking Copenhagen") 
), 

    # Create a spot for the barplot 
    mainPanel(
    plotOutput("pplot") 
) 

) 
) 
) 



# Define a server for the Shiny app 
server <- shinyServer(function(input, output) { 

    #Subset the data based on user input 
    p.df <- reactive({ 
    subset(df, input$type > 5) 
    }) 


    # Fill in the spot we created for a plot 
    output$pplot <- renderPlot({ 

    pdat.df <- p.df() 

    # Render a barplot 
    p <- ggplot(pdat.df, aes(x=pdat.df$street, y=input$type)) + geom_bar(stat = "identity")+coord_flip() 

    print(p) 

    }) 
}) 

shinyApp(ui=ui, server = server) 

Результат ниже это не совсем то, что я искал. Я попробовал варианты, предложенные здесь shiny not displaying my ggplot as I'd expect., но не повезло с подмножеством в пределах ggplot() (как в моем статическом примере) или geom_bar()

Любые предложения приветствуются. Благодаря!

enter image description here

+0

Я не могу проверить свой код, но, возможно, это связано с «вход $ Тип> 5» и "choice = colnames (df), selected =" type_1 "" является type_1 фактором? потому что вы фильтруете число. – MLavoie

+0

type_1-5 является числовым, поэтому я предполагаю, что это не проблема? –

+0

или, может быть, в вас реактивное() выражение df <- subset (df, input $ type> 5); df – MLavoie

ответ

0

Я думаю, что вам нужно изменить subset(df, input$type > 5) на return(df[df[input$type]>5,])

, потому что вход возврата character и subset косяка interprent его в качестве colname , например (с вашими данными)

subset(df,"type_1">5) 
    # street type_1 type_2 type_3 type_4 type_5 
    #1  a  55  12  0  0  5 
    #2  b  55  12  2  0  0 
    #3  c  55  12  0  4  6 
    #4  d  55  12  3  0  0 
    #5  e  55  12  0  8  11 
    #6  f  0  6  7  5  12 
    #7  g  44  6  8  3  9 

df[df["type_1"]>5,] 
    # street type_1 type_2 type_3 type_4 type_5 
    #1  a  55  12  0  0  5 
    #2  b  55  12  2  0  0 
    #3  c  55  12  0  4  6 
    #4  d  55  12  3  0  0 
    #5  e  55  12  0  8  11 
    #7  g  44  6  8  3  9 

(6 -я строка подмножество)

я не вижу реорганизовать в йор блестящей версии попробовать

pdat.df <- p.df() 
pdat.df$street=reorder(pdat.df$street,pdat.df[[input$type]]) 

и, как @MLavoie сказал

aes_string(x="street", y=input$type) 
+0

Успех! 1000 благодаря вам и @MLavoie! –

Смежные вопросы