Michał89
Michał89

Reputation: 87

Tooltip in percent stacked barchart

I am trying to format my ggplotly tooltip in a percent stacked barchart. In order to do this, I am editing a 'text' parameter in 'aes'

   library(scales)
    library(tidyverse)
    library(plotly)
    library(ggplot2)
    library(shiny)
    
    #Define dataframe
    weeknum <- c(1,1,1,1,2,2,2,2,3,3,3,3)
    channel <- rep(c("a", "b"), 6)
    product <- c(rep("x",6), rep("y",6))
    data <- data.frame(weeknum, channel, product)
    
    # Define UI
    ui <- fluidPage(theme = shinytheme("flatly"),
                               mainPanel(
                                 h1("plot"),
                                 plotlyOutput(outputId = "plot_1", height = "800px")
                               ))
             
    # Define server function  
    server <- function(input, output) {
      output$plot_1 <- renderPlotly({
        p1 <- data %>% 
          ggplot(aes(x=weeknum, fill=channel, text = paste('share:', percent(..count..), "<br> channel", fill))) +
          geom_bar(position = "fill", stat ='count')+
          facet_grid(rows = vars(product))
        fig1 <- ggplotly(p1, tooltip = "text")
        fig1
      })
    }
    
    # Create Shiny object
    shinyApp(ui = ui, server = server)

so here I got only count * 100% in the tooltip. I know I need to divide it by a dynamic height of a bar, because in this dashboard I'm gonna use some filters. Question is how can I do this? (..count..)/sum(..count..) doesn't work.

Upvotes: 1

Views: 392

Answers (1)

Johan Rosa
Johan Rosa

Reputation: 3152

Since you did not provide a reproducible example, I created one using mtcars data set. This is how I would approach your task.

library(ggplot2)
library(dplyr)

plot <- mtcars %>% 
  count(cyl, am, name = "count") %>%
  mutate(across(c(cyl, am), as.character)) %>% 
  ggplot(
    aes(x = cyl, fill= am, y = count,
        text = paste('share:', scales::percent(count/sum(count)), '<br>AM:', am)
        )
       ) + 
  geom_col(position = "fill")

plotly::ggplotly(plot, tooltip = "text") 
  

Upvotes: 2

Related Questions