Sunday, 15 August 2010

r - Shiny and ggplot2 - Tutorial -



r - Shiny and ggplot2 - Tutorial -

i'm making myself familiar shiny, however, familiar might bit of overstatement... tried shiny tutorials, specially i'd adapt lesson 5 own data.

i created additional r-script help.r, in tutorial:

percent_map <- function(var, color, legend, min = 0, max = 100) { # constrain gradient percents occur between min , max var <- pmax(var, min) var <- pmin(var, max) #plot aha <- ggplot(abst, aes(long,lat, group=group))+ geom_polygon(aes(fill=var))+ coord_fixed()+ scale_fill_gradient(low = "lightskyblue", high = color, space = "lab", na.value = "lightblue")+ labs(title=var, x="", y="")+ theme(axis.text=element_blank(), axis.ticks=element_blank(), panel.grid.minor = element_blank(), panel.background = element_blank() ) print(aha) }

my ui.r:

library(shiny) # define ui application draws histogram shinyui(fluidpage( titlepanel("ja-anteil von abstimmungen"), sidebarlayout( sidebarpanel( helptext("create maps info ballot outcomes."), selectinput("var", label = "choose variable display", choices = c("epidemiegesetz", "bg", "1:12", "familien", "nationalstrassenabgabegesetz"), selected = "epidemiegesetz"), sliderinput("range", label = "range of interest:", min = 0, max = 100, value = c(0, 100)) ), mainpanel(plotoutput("map")) ) ))

and server.r:

library(ggplot2) abst <- readrds("~/try.rds") abst$kantonsnr <- as.numeric(abst$kantonsnr) source("~/help.r") library(shiny) shinyserver( function(input, output) { output$map <- renderplot({ info <- switch(input$var, "epidemiegesetz" = abst$epidemiegesetz, "bg" = abst$bg, "1:12" = abst$loehne, "familien" = abst$familien, "nationalstrassenabgabegesetz" = abst$nationalstrassenabgabegesetz) color <- switch(input$var, "epidemiegesetz" = "darkgreen", "bg" = "red", "1:12" = "darkorange", "familien" = "darkviolet", "nationalstrassenabgabegesetz" = "darkblue") legend <- switch(input$var, "epidemiegesetz" = "epidemiegesetz", "bg" = "bg", "1:12" = "sozis", "familien" = "familien", "nationalstrassenabgabegesetz" = "blablabla") percent_map(var = data, color = color, max = input$range[2], min = input$range[1]) }) } )

but not remotely work:

error: arguments imply differing number of rows: 0, 179493

what doing wrong? in advance.

instead of passing info straight percent_map, pass column name. it'll faster since avoids copying. here's modified function:

percent_map <- function(var, color, legend, min = 0, max = 100) { # constrain gradient percents occur between min , max abst$tmp_var <- abst[[var]] abst$tmp_var <- pmax(abst$tmp_var, min) abst$tmp_var <- pmin(abst$tmp_var, max) #plot aha <- ggplot(abst, aes(long, lat, group=group))+ geom_polygon(aes(fill = tmp_var))+ coord_fixed()+ scale_fill_gradient(low = "lightskyblue", high = color, space = "lab", na.value = "lightblue")+ labs(title=var, x="", y="")+ theme(axis.text=element_blank(), axis.ticks=element_blank(), panel.grid.minor = element_blank(), panel.background = element_blank() ) print(aha) abst$tmp_var <- null }

and prepare server.r.

shinyserver( function(input, output) { output$map <- renderplot({ info <- switch(input$var, "epidemiegesetz" = "epidemiegesetz", "bg" = "bg", "1:12" = "loehne", "familien" = "familien", "nationalstrassenabgabegesetz" = "nationalstrassenabgabegesetz") color <- switch(input$var, "epidemiegesetz" = "darkgreen", "bg" = "red", "1:12" = "darkorange", "familien" = "darkviolet", "nationalstrassenabgabegesetz" = "darkblue") legend <- switch(input$var, "epidemiegesetz" = "epidemiegesetz", "bg" = "bg", "1:12" = "sozis", "familien" = "familien", "nationalstrassenabgabegesetz" = "blablabla") percent_map(var = data, color = color, max = input$range[2], min = input$range[1], legend = legend) }) } )

as side note, legend argument not used, did mean labs(title=legend, x="", y="")?

anyway, runs without errors.

r ggplot2 polygon shiny

No comments:

Post a Comment