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

如何在R中使用Treemapify为树图子组设置指定自定义颜色

错误原因说明

  • 第一种方案的问题:aes() 内的参数是数据映射规则,不是图形属性直接赋值。你在aes中传入颜色向量时,ggplot会将这些颜色值识别为分类标签,自动匹配默认色板,不会直接渲染为对应颜色。如果需要给所有元素设置统一固定颜色,应该把fill参数放在aes()外部,但你需要按子组区分颜色,所以不适用这种写法。
  • 第二种方案的问题:scale_fill_manual()的values参数需要和你映射的分类变量的唯一值一一对应,你这里fill映射的是parent字段,总共只有2个唯一分类(Europe、Africa),传入4个颜色值会导致识别异常。

正确实现方法

直接在scale_fill_manual中按子组名称配对颜色即可,推荐给颜色向量添加分类名作为键,避免因为分类顺序变化导致颜色匹配错误,示例代码如下:

library(ggplot2)
library(treemapify)

name <- c("France", "Germany", "Chad", "Mali")
population <- c(100, 200, 300, 400)
parent <- c("Europe","Europe","Africa","Africa")
df <- data.frame(name, population, parent)

ggplot(df, aes(area = population, label = name, fill = parent, subgroup = parent)) +
  geom_treemap() +
  geom_treemap_text(colour = "white", place = "centre", grow = TRUE) +
  # 按子组名称一一指定颜色
  scale_fill_manual(values = c("Europe" = "#ff0000", "Africa" = "#00ff00"))

如果你需要给每个独立的小色块(对应国家)单独设置颜色,只需要把fill的映射值改成name,再给scale_fill_manual传入4个对应国家的颜色值即可:

# 仅列出修改部分
ggplot(df, aes(area = population, label = name, fill = name, subgroup = parent)) +
  # 其余图层不变
  scale_fill_manual(values = c("France" = "green", "Germany" = "blue", "Chad" = "yellow", "Mali" = "orange"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 12:54:01