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

如何用Plotly绘制多动态环形图?超6个时显示下拉箭头

实现带下拉切换的多动态环形图(Donut Chart)

当然可以实现!结合Shiny的交互组件和Plotly的可视化能力,就能轻松做出你要的效果:当环形图数量超过6个时,通过下拉选项切换不同分组的环形图,每组最多显示6个。

实现步骤与代码示例

1. 准备环境与数据

先加载所需工具包,同时构造符合你需求的示例数据:

library(shiny)
library(plotly)
library(dplyr)

# 构造示例数据(匹配你提供的结构)
set.seed(123)
value <- sample(1:300, 10)  # 模拟10个KPI的实际值
Target <- sample(50:350, 10) # 模拟对应目标值
KPI <- paste0("Sec", 1:10)
df <- data.frame(KPI, value, Target)

2. 编写交互可视化应用

核心逻辑是:自动将KPI按每6个一组拆分,通过下拉菜单切换分组,每组内的环形图会组合展示在同一个区域中:

ui <- fluidPage(
  titlePanel("多KPI环形图监控"),
  # 下拉菜单:KPI数量>6时自动生成分组选项
  selectInput("group", "选择KPI分组",
              choices = paste0("组", 1:ceiling(nrow(df)/6))),
  plotlyOutput("donut_plots")
)

server <- function(input, output) {
  # 按每6个KPI拆分分组(响应式数据)
  grouped_data <- reactive({
    split(df, ceiling(seq_along(df$KPI)/6))
  })
  
  # 根据选中分组渲染环形图组
  output$donut_plots <- renderPlotly({
    selected_group <- grouped_data()[[input$group]]
    
    # 为每个KPI生成独立环形图
    plot_list <- lapply(1:nrow(selected_group), function(i) {
      kpi_detail <- data.frame(
        category = c("实际值", "剩余目标"),
        value = c(selected_group$value[i], 
                  selected_group$Target[i] - selected_group$value[i])
      )
      
      plot_ly(kpi_detail, labels = ~category, values = ~value,
              type = "pie", hole = 0.6, # hole参数控制环形空心大小
              textinfo = "label+percent",
              textposition = "inside",
              showlegend = FALSE) %>%
        layout(title = selected_group$KPI[i],
               margin = list(t = 30, b = 0, l = 0, r = 0))
    })
    
    # 将多个环形图组合成规整布局
    subplot(plot_list, nrows = 2, margin = 0.05) %>%
      layout(showlegend = FALSE)
  })
}

shinyApp(ui, server)

3. 效果与关键细节

  • 分组自适应:无论KPI总数多少,都会自动按每6个一组拆分,下拉菜单同步生成对应选项
  • 环形图逻辑:每个环形图展示单个KPI的实际值占目标值的比例,剩余部分为未完成的目标量
  • 布局优化:多个环形图自动排列成多行,保持视觉整洁,每个环形图自带KPI名称标题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 02:40:27