简体   繁体   中英

R: Shiny/Ggvis - daterangeInput: Bar graph changes but Tooltip does not

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.

在此处输入图片说明

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))

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM