You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shiny应用中Plotly饼图Hoverinfo文本功能异常求助

解决Shiny饼图hover文本报错的问题

嘿,我来帮你搞定这个饼图hover文本的错误!你遇到的Column text must be length 1 or 4, not 2报错,根源在于table(testdata$OriginId)返回的是一个类别数量长度的向量(比如你的测试数据里是2个元素:INT和DOM各2个),但plotly的text参数需要和饼图的数据点数量(也就是扇区数量)对应,直接用table结果就会出现长度不匹配的问题。

咱们换个思路,先提前把数据汇总好,再传给plotly就没问题了,具体步骤如下:

步骤1:预处理数据,统计每个OriginId的客户数

先把原始数据按OriginId分组统计数量,生成一个汇总数据框,这样每个类别对应一行,包含类别名称和对应的客户数:

summary_data <- as.data.frame(table(testdata$OriginId))
colnames(summary_data) <- c("OriginId", "ClientCount")

步骤2:用汇总数据绘制饼图,设置正确的hover文本

用这个汇总后的数据集来画饼图,text参数直接调用汇总好的ClientCount字段,这样每个扇区的hover文本长度就和数据行数匹配了:

完整的Shiny示例代码

library(shiny)
library(plotly)

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

server <- function(input, output) {
  # 你的测试数据
  testdata <- data.frame(
    OriginId = c("INT", "DOM", "INT","DOM"),
    RequestedDtTm = c("2017-01-16 16:43:33 ", "2017-01-17 16:43:33 ", "2017-01-18 16:43:33 ","2017-01-19 16:43:33 ")
  )
  
  # 预处理:统计每个OriginId的客户数量
  summary_data <- as.data.frame(table(testdata$OriginId))
  colnames(summary_data) <- c("OriginId", "ClientCount")
  
  output$pieChart <- renderPlotly({
    plot_ly(summary_data, 
            labels = ~OriginId, 
            values = ~ClientCount, 
            type = 'pie',
            text = ~paste(ClientCount, " clients"), # 这里用汇总后的数量,长度匹配
            hoverinfo = 'text+label') %>% # 控制hover显示标签和文本
      layout(title = 'Origin ID 客户分布')
  })
}

shinyApp(ui = ui, server = server)

这样运行后,鼠标悬停在饼图的每个扇区上,就能准确显示对应的客户数量啦!

内容的提问来源于stack exchange,提问作者firmo23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:51:04