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
相关产品推荐
相关产品推荐

