0

My graph changes, i know this cause the Y axis changes it's limits. But the tooltip for each bar is the same, no matter if i change the daterange.

As you see, it says: "Total number of Sessions: 11,610" for the "Directo" source. This is for the entire month of Dicember. However, if i change the dates from: "2014-12-01" to "2014-12-01", to see the data just for the first day of dicember, the bars change, but the tool tip keeps saying: "Total number of Sessions: 11,610" for "Directo".

I think it is a problem with my "mysessions" function fot the tool tip part, that does not recognize the subset for the data when daterangeInput change. But cannot figure it out.

enter image description here

My server.R: ### You can see my data from "dput()" at the end.

library(dplyr)
library(ggvis)
library(shiny)


Visitas_Por_Fuente <- read.csv("D:\\RCoursera\\Star- App3\\Visitas_Por_Fuente_Dic.csv")   ## Call it from a CSV file, but you can see the dput() data at the end of the post.                                                                          
Visitas_Por_Fuente$date <- as.Date(Visitas_Por_Fuente$date)


shinyServer(
  function(input, output, session){

    myData <- reactive({
      # Filter the data based on user selection month
      date_seq <- seq(input$dates[1], input$dates[2], by = "day")

      EvolucionVisitas <- filter(Visitas_Por_Fuente, date %in% date_seq)



      return(EvolucionVisitas)

    })

    ############# Evolución de las visitas ##############################################
    #####################################################################################**

    myvis <- reactive({


      EvolucionVisitas <- myData()

      mysessions <- function(x) {
        if(is.null(x)) return(NULL)
        # compute the total number of sessions of the "Fuente" type that is hovered over
        total_sessions <- sum(EvolucionVisitas[EvolucionVisitas$Fuentes == x$Fuentes, "sessions"])
        # format the value with prettyNum if you like:
        paste0("Total number of Sessions:", "&nbsp;",
               prettyNum(total_sessions, big.mark=",",scientific=F))
      }


      outvis <-
        EvolucionVisitas %>%
        ggvis(~Fuentes, ~sessions) %>%
        layer_bars(width = 0.8, fill = ~Fuentes) %>%
        add_tooltip(mysessions ,"hover")
      return(outvis)
    })

    myvis %>% bind_shiny("EvolucionVisitas")
  }
) 

My ui.R:

library(shiny)
library(ggvis)
shinyUI(
  # Use a fluid Bootstrap layout
  fluidPage(

    # Give the page a title
    br(),
    br(),
    titlePanel("Visitas por fuente"),

    # Generate a row with a sidebar
    sidebarLayout(
      # Define the sidebar with one input
      sidebarPanel(
        dateRangeInput("dates", label = h3("Date range"),
                       start = "2014-12-01", end = "2014-12-31")
      ),
      mainPanel(
        tabsetPanel(
          tabPanel('Evolución de las visitas',
                   ggvisOutput("EvolucionVisitas"))
        )
      )
    )
  )
) 

My data: #needed to convert using as.data.frame. Something is going on with the group_by function from dplyr.

as.data.frame(structure(list(date = structure(c(1417410000, 1417410000, 1417410000, 
1417410000, 1417410000, 1417410000, 1417496400, 1417496400, 1417496400, 
1417496400, 1417496400, 1417496400, 1417496400, 1417582800, 1417582800, 
1417582800, 1417582800, 1417582800, 1417582800, 1417582800, 1417669200, 
1417669200, 1417669200, 1417669200, 1417669200, 1417669200, 1417669200, 
1417755600, 1417755600, 1417755600, 1417755600, 1417755600, 1417755600, 
1417842000, 1417842000, 1417842000, 1417842000, 1417842000, 1417842000, 
1417842000, 1417928400, 1417928400, 1417928400, 1417928400, 1417928400, 
1417928400, 1417928400, 1418014800, 1418014800, 1418014800, 1418014800, 
1418014800, 1418014800, 1418014800, 1418101200, 1418101200, 1418101200, 
1418101200, 1418101200, 1418101200, 1418101200, 1418187600, 1418187600, 
1418187600, 1418187600, 1418187600, 1418187600, 1418187600, 1418274000, 
1418274000, 1418274000, 1418274000, 1418274000, 1418274000, 1418274000, 
1418360400, 1418360400, 1418360400, 1418360400, 1418360400, 1418360400, 
1418360400, 1418446800, 1418446800, 1418446800, 1418446800, 1418446800, 
1418446800, 1418446800, 1418533200, 1418533200, 1418533200, 1418533200, 
1418533200, 1418533200, 1418533200, 1418619600, 1418619600, 1418619600, 
1418619600, 1418619600, 1418619600, 1418619600, 1418706000, 1418706000, 
1418706000, 1418706000, 1418706000, 1418706000, 1418706000, 1418792400, 
1418792400, 1418792400, 1418792400, 1418792400, 1418792400, 1418792400, 
1418878800, 1418878800, 1418878800, 1418878800, 1418878800, 1418878800, 
1418878800, 1418965200, 1418965200, 1418965200, 1418965200, 1418965200, 
1418965200, 1418965200, 1419051600, 1419051600, 1419051600, 1419051600, 
1419051600, 1419051600, 1419051600, 1419138000, 1419138000, 1419138000, 
1419138000, 1419138000, 1419138000, 1419224400, 1419224400, 1419224400, 
1419224400, 1419224400, 1419224400, 1419224400, 1419310800, 1419310800, 
1419310800, 1419310800, 1419310800, 1419310800, 1419397200, 1419397200, 
1419397200, 1419397200, 1419397200, 1419397200, 1419397200, 1419483600, 
1419483600, 1419483600, 1419483600, 1419483600, 1419483600, 1419483600, 
1419570000, 1419570000, 1419570000, 1419570000, 1419570000, 1419570000, 
1419656400, 1419656400, 1419656400, 1419656400, 1419656400, 1419656400, 
1419742800, 1419742800, 1419742800, 1419742800, 1419742800, 1419742800, 
1419742800, 1419829200, 1419829200, 1419829200, 1419829200, 1419829200, 
1419829200, 1419915600, 1419915600, 1419915600, 1419915600, 1419915600, 
1419915600, 1419915600, 1420002000, 1420002000, 1420002000, 1420002000, 
1420002000), class = c("POSIXct", "POSIXt"), tzone = "America/Lima"), 
    Fuentes = c("Adwords", "Directo", "Email", "Referencias", 
    "SEO", "Social Media", "Adwords", "Campañas", "Directo", 
    "Email", "Referencias", "SEO", "Social Media", "Adwords", 
    "Campañas", "Directo", "Email", "Referencias", "SEO", "Social Media", 
    "Adwords", "Campañas", "Directo", "Email", "Referencias", 
    "SEO", "Social Media", "Campañas", "Directo", "Email", "Referencias", 
    "SEO", "Social Media", "Adwords", "Campañas", "Directo", 
    "Email", "Referencias", "SEO", "Social Media", "Adwords", 
    "Campañas", "Directo", "Email", "Referencias", "SEO", "Social Media", 
    "Adwords", "Campañas", "Directo", "Email", "Referencias", 
    "SEO", "Social Media", "Adwords", "Campañas", "Directo", 
    "Email", "Referencias", "SEO", "Social Media", "Adwords", 
    "Campañas", "Directo", "Email", "Referencias", "SEO", "Social Media", 
    "Adwords", "Campañas", "Directo", "Email", "Referencias", 
    "SEO", "Social Media", "Adwords", "Campañas", "Directo", 
    "Email", "Referencias", "SEO", "Social Media", "Adwords", 
    "Campañas", "Directo", "Email", "Referencias", "SEO", "Social Media", 
    "Adwords", "Campañas", "Directo", "Email", "Referencias", 
    "SEO", "Social Media", "Adwords", "Campañas", "Directo", 
    "Email", "Referencias", "SEO", "Social Media", "Adwords", 
    "Campañas", "Directo", "Email", "Referencias", "SEO", "Social Media", 
    "Adwords", "Campañas", "Directo", "Email", "Referencias", 
    "SEO", "Social Media", "Adwords", "Campañas", "Directo", 
    "Email", "Referencias", "SEO", "Social Media", "Adwords", 
    "Campañas", "Directo", "Email", "Referencias", "SEO", "Social Media", 
    "Adwords", "Campañas", "Directo", "Email", "Referencias", 
    "SEO", "Social Media", "Campañas", "Directo", "Email", "Referencias", 
    "SEO", "Social Media", "Adwords", "Campañas", "Directo", 
    "Email", "Referencias", "SEO", "Social Media", "Campañas", 
    "Directo", "Email", "Referencias", "SEO", "Social Media", 
    "Adwords", "Campañas", "Directo", "Email", "Referencias", 
    "SEO", "Social Media", "Adwords", "Campañas", "Directo", 
    "Email", "Referencias", "SEO", "Social Media", "Campañas", 
    "Directo", "Email", "Referencias", "SEO", "Social Media", 
    "Campañas", "Directo", "Email", "Referencias", "SEO", "Social Media", 
    "Adwords", "Campañas", "Directo", "Email", "Referencias", 
    "SEO", "Social Media", "Campañas", "Directo", "Email", "Referencias", 
    "SEO", "Social Media", "Adwords", "Campañas", "Directo", 
    "Email", "Referencias", "SEO", "Social Media", "Directo", 
    "Email", "Referencias", "SEO", "Social Media"), sessions = c(10L, 
    326L, 18L, 527L, 999L, 52L, 3L, 7L, 324L, 19L, 498L, 933L, 
    44L, 5L, 12L, 363L, 15L, 546L, 1206L, 202L, 7L, 12L, 1122L, 
    27L, 1249L, 5168L, 607L, 17L, 432L, 22L, 527L, 1553L, 637L, 
    5L, 5L, 356L, 16L, 507L, 1901L, 487L, 4L, 8L, 312L, 30L, 
    500L, 1622L, 370L, 3L, 11L, 341L, 18L, 504L, 1312L, 352L, 
    2L, 13L, 1188L, 33L, 682L, 2008L, 1508L, 3L, 15L, 1086L, 
    36L, 646L, 2124L, 380L, 3L, 11L, 355L, 17L, 383L, 1054L, 
    236L, 2L, 9L, 321L, 15L, 370L, 1118L, 245L, 7L, 9L, 259L, 
    13L, 332L, 1261L, 230L, 3L, 7L, 539L, 9L, 626L, 2336L, 256L, 
    1L, 12L, 292L, 8L, 386L, 1070L, 220L, 1L, 12L, 278L, 9L, 
    393L, 1129L, 22L, 1L, 16L, 521L, 18L, 665L, 2400L, 20L, 1L, 
    13L, 204L, 7L, 258L, 789L, 11L, 2L, 12L, 253L, 6L, 277L, 
    803L, 9L, 1L, 4L, 262L, 8L, 324L, 960L, 9L, 3L, 442L, 15L, 
    516L, 1890L, 16L, 2L, 14L, 249L, 8L, 240L, 688L, 11L, 15L, 
    182L, 7L, 200L, 548L, 5L, 2L, 3L, 171L, 7L, 183L, 480L, 5L, 
    1L, 3L, 176L, 5L, 231L, 506L, 6L, 15L, 283L, 18L, 322L, 786L, 
    11L, 13L, 210L, 9L, 232L, 649L, 2L, 1L, 2L, 258L, 4L, 306L, 
    891L, 9L, 4L, 183L, 10L, 293L, 634L, 4L, 1L, 3L, 188L, 9L, 
    244L, 566L, 11L, 134L, 1L, 176L, 453L, 4L)), .Names = c("date", 
"Fuentes", "sessions"), row.names = c(NA, -208L), class = c("grouped_df", 
"tbl_df", "tbl", "data.frame"), vars = list(date), drop = TRUE))
Omar Gonzales
  • 3,806
  • 10
  • 56
  • 120
  • there is no date column in your `dput`, so the code doesn't run – NicE Feb 16 '15 at 09:19
  • @NicE, i've changed the dput data. It's correct now. I had to group_by(date,Fuentes) and then summarise(sessions = sum(sessions)). Any help is welcome. – Omar Gonzales Feb 16 '15 at 15:28

1 Answers1

1

For some reason, if a custom tool_tip function will be used as reactive, then the function must be defined outside of the reactive context. Even putting the function directly in the ggvis code won't update with the changing data. By simply moving the mysessions function above the reactive ggvis plot your code will work fine.

shiny::runGist("https://gist.github.com/cdeterman/cc0e4a38863edcfea3ea")

I don't have a deep enough understand of the mechanics within shiny to explain why this is. You would probably need to go to the issues on the github page and see if someone there could explain this better if you are curious about the specific reason.

cdeterman
  • 19,630
  • 7
  • 76
  • 100
  • cdeterman, i've tried your Gist but when hovering, got: `Warning: Unhandled error in observer: object 'EvolucionVisitas' not found observe({ value <- session$input[[id]] if (is.null(value)) return() if (!is.list(value$data)) return() df <- value$data class(df) <- "data.frame" attr(df, "row.names") <- .set_row_names(1L) fun(data = df, location = list(x = value$pagex, y = value$pagey), session = session) })`. Also, i've change the dput() data, so now it's correct. Please see my comments to NicE – Omar Gonzales Feb 16 '15 at 15:34
  • @OmarGonzales, I have updated the gist. The dataset needed to be called within the `tool_tip`. Also, not sure what `structure` your updated data is but it needed to be converted to a `data.frame`. – cdeterman Feb 16 '15 at 15:56
  • works perfect. And yes the data needeed to by converted to data.frame (with as.data.frame()), i think this is because of the group_by function from dplyr i've used. Thanks again. – Omar Gonzales Feb 16 '15 at 16:17
  • Glad to help, please be sure to accept the answer :) – cdeterman Feb 16 '15 at 16:18
  • may you expling this subsetting from the mysessions function: `total_sessions <- sum(EvolucionVisitas[EvolucionVisitas$Fuentes == x$Fuentes, "sessions"])`, in you answer. I know subsetting, but i'm curios about how this works. – Omar Gonzales Feb 16 '15 at 22:47