首页 > 解决方案 > 根据计数更改 ggplotly geom_bar 中的悬停文本

问题描述

所以我正在使用 R Shiny 制作一个网络应用程序。我想用 ggplotly 显示条形图,这里是输出。我想将 hovertext 更改为 Category: ... Count: ..
我尝试了下面的代码,但我不知道如何调用计数的值。我试过打电话给计数,频率。但它不起作用。知道如何解决这个问题吗?

  output$plotb <- renderPlotly({
    ggplotly(ggplot(data=dataset(),aes(x=dataset()[[input$bo]],
                                       text=paste("Category: ", dataset()[[input$bo]],
                                                  "<br>Count: ")))+
               geom_bar(fill='cornflowerblue',color="black")+
               labs(title=sprintf("Bar chart of %s",input$bo),
                    x=input$bo,y="Frequency")+
               theme_light(),tooltip="text")
  })

标签: rshinygeom-barggplotly

解决方案


实现所需结果的一种选择是通过ggplot2::after_stat它允许您访问由统计计算的值,例如在geom_bar默认统计层的情况下是stat="count". 不幸的是,这样做需要一些额外的工作来获取类别的标签。为此categories(),我在示例代码中添加了一个响应式,它将输入变量转换为一个因子并返回该因子的级别。这样做允许通过以下方式添加类别after_stat标签categories()[x]

由于您没有提供任何数据,因此我将其ggplot2::mpg用作示例数据:

library(shiny)
library(plotly) 

ui <- fluidPage(
  plotlyOutput("plotb")
)

server <- function(input, output, session) {
  
  input <- list(bo = "class")
  
  dataset <- reactive({ mpg })
  
  categories <- reactive({ levels(factor(dataset()[[input$bo]])) })
  
  output$plotb <- renderPlotly({
    ggplot(data = dataset(), aes(
      x = .data[[input$bo]],
      text = after_stat(paste(
        "Category: ", categories()[x],
        "<br>Count: ", count
      ))
    )) +
      geom_bar(fill = "cornflowerblue", color = "black") +
      labs(
        title = sprintf("Bar chart of %s", input$bo),
        x = input$bo, y = "Frequency"
      ) +
      theme_light()
    
    ggplotly(tooltip = "text")
  })
}

shinyApp(ui, server)

在此处输入图像描述


推荐阅读