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

使用ggplot2绘制带颜色渐变分组的癌症类型饼图

解决方案:ggplot2绘制分层渐变饼图

1. 准备环境与示例数据

先加载所需工具包,同时构造匹配需求的示例metadata数据集:

library(ggplot2)
library(dplyr)
library(colorspace) # 用于生成颜色渐变,也可手动指定

# 构造示例数据
set.seed(123)
metadata <- data.frame(
  Cancer_Type = sample(c("CancerA", "CancerB", "CancerC", "CancerD"), 500, replace = TRUE),
  dataset = sample(c("Dataset1", "Dataset2", "Dataset3"), 500, replace = TRUE),
  row.names = paste0("Sample_", 1:500)
)

2. 统计分组样本量

按Cancer_Type和dataset分组统计样本数,这是绘制饼图的核心数据:

count_data <- metadata %>%
  count(Cancer_Type, dataset, name = "sample_count") %>%
  arrange(Cancer_Type)

3. 定义分层渐变颜色

给四种癌症分配主色,再为每个癌症下的数据集生成对应主色的渐变子色:

# 定义四种癌症的主色
main_colors <- c(
  "CancerA" = "#E74C3C", # 红色
  "CancerB" = "#3498DB", # 蓝色
  "CancerC" = "#2ECC71", # 绿色
  "CancerD" = "#F39C12"  # 橙色
)

# 为每个Cancer_Type + dataset组合生成渐变色
gradient_colors <- lapply(names(main_colors), function(cancer) {
  # 获取当前癌症下的数据集数量
  dataset_num <- nrow(filter(count_data, Cancer_Type == cancer))
  # 生成从主色到浅色调的渐变
  lighten(main_colors[cancer], seq(0, 0.4, length.out = dataset_num))
}) %>% unlist()

# 命名颜色:用interaction(Cancer_Type, dataset)作为匹配键
names(gradient_colors) <- with(count_data, interaction(Cancer_Type, dataset))

4. 绘制分层渐变饼图

用ggplot2绘制饼图,通过填充映射关联分组组合,指定自定义渐变颜色:

ggplot(count_data, aes(x = "", y = sample_count, fill = interaction(Cancer_Type, dataset))) +
  geom_bar(stat = "identity", width = 1) +
  # 转换为饼图坐标系
  coord_polar("y", start = 0) +
  # 应用自定义渐变颜色
  scale_fill_manual(values = gradient_colors) +
  # 添加标签:显示癌症类型与对应样本量(可选)
  geom_text(aes(label = paste0(Cancer_Type, "\n", sample_count)), 
            position = position_stack(vjust = 0.5)) +
  # 去除冗余元素,简化饼图样式
  theme_void() +
  labs(fill = "Cancer + Dataset")

关键说明

  • 用interaction(Cancer_Type, dataset)作为填充映射,确保每个子块能单独分配颜色
  • colorspace::lighten可快速生成主色的浅色调渐变,也可手动替换为自定义色值
  • theme_void()用于移除坐标轴、背景等无关元素,让饼图更简洁

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 01:43:17