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