如何用ggplot绘制多KPI环形图/饼图展示项目动态指标
用ggplot绘制多KPI环形图
完全可以用ggplot2实现这类多KPI环形图,以下是具体方案:
数据预处理
首先需要把宽格式数据转换为长格式,方便ggplot分组绘图,同时计算每个KPI的完成率和剩余率(目标值-实际值):
library(ggplot2) library(dplyr) library(tidyr) # 示例数据集 dataset <- data.frame( value = c(3, 5, 200), Target = c(10, 20, 250), KPI = c("a", "b", "c") ) # 数据转换:生成完成率、剩余率的长格式数据 plot_data <- dataset %>% mutate(remaining = Target - value) %>% select(KPI, value, remaining) %>% pivot_longer(cols = -KPI, names_to = "type", values_to = "amount") %>% # 计算每个KPI内各部分的占比(用于环形分段) group_by(KPI) %>% mutate(ratio = amount / sum(amount)) %>% ungroup()
绘制环形图
利用ggplot的geom_bar结合极坐标转换实现环形效果,同时区分实际值和剩余部分:
ggplot(plot_data, aes(x = 2, y = ratio, fill = type)) + # 绘制环形的分段 geom_bar(stat = "identity", position = "stack", width = 1) + # 按KPI分面,每个KPI对应一个环形 facet_wrap(~KPI) + # 转换为极坐标,形成环形 coord_polar(theta = "y") + # 调整坐标轴,隐藏多余元素,形成环形中空 xlim(0.5, 2.5) + theme_void() + # 自定义填充颜色,区分实际值和剩余部分 scale_fill_manual(values = c("value" = "#2ecc71", "remaining" = "#ecf0f1"), labels = c("实际值", "未完成")) + # 添加标题和图例 labs(title = "多KPI完成情况环形图", fill = "") + theme(plot.title = element_text(hjust = 0.5, size = 14, face = "bold"), legend.position = "bottom")
额外调整说明
- 若要展示实际值/目标值的具体数值,可添加
geom_text在环形内部标注完成率或具体数值 - 调整环形粗细,修改
geom_bar的width参数即可 - 可根据需求自定义颜色、分面布局、标签样式等
内容的提问来源于stack exchange,提问作者gh rah
相关产品推荐
相关产品推荐

