百分比堆积条形图的工具提示

时间:2021-05-05 09:11:39

标签: r ggplot2 shiny tooltip ggplotly

我正在尝试在百分比堆积条形图中格式化我的 ggplotly 工具提示。为了做到这一点,我正在编辑“aes”中的“text”参数

   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)

所以这里我在工具提示中只得到 count * 100%。我知道我需要将它除以一个条的动态高度,因为在这个仪表板中我将使用一些过滤器。问题是我该怎么做? (..count..)/sum(..count..) 不起作用。

1 个答案:

答案 0 :(得分:1)

由于您没有提供可重现的示例,我使用 mtcars 数据集创建了一个示例。这就是我处理你的任务的方式。

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

相关问题