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

如何在treemapify中分别修改拼接标签不同部分的字体颜色与大小

实现方案

原生geom_treemap_text()不支持单条拼接标签内不同部分设置独立样式,你可以选择以下两种方案实现需求:

方案1:分层渲染文本(兼容性更好,调整更灵活)

叠加3次geom_treemap_text()分别渲染三个字段,单独控制每个字段的样式和位置:

library(ggplot2)
library(treemapify)
library(formattable)
library(dplyr)

plot_data <- data.frame(
  region = c("a","b","c","d","e","f"),
  amount = c(3,2,1,7,2,4),
  increase = c(0.5,0.1,0.7,0.4,0.3,0.9)
)

plot_data %>% 
  ggplot(aes(area = amount, fill = region)) + 
  geom_treemap() +
  # 渲染region:深蓝色,位置偏上
  geom_treemap_text(aes(label = region), 
                    color = "darkblue", 
                    size = 14, 
                    place = "top",
                    padding.y = unit(3, "mm")) +
  # 渲染amount:灰色,位置居中
  geom_treemap_text(aes(label = comma(amount, 1)), 
                    color = "grey60", 
                    size = 12,
                    place = "centre") +
  # 渲染increase:白色,位置偏下
  geom_treemap_text(aes(label = percent(increase, 1)), 
                    color = "white", 
                    size = 10,
                    place = "bottom",
                    padding.y = unit(3, "mm"))
  • 可以根据实际出图尺寸调整size参数修改字号,调整padding.y修改文本和区块边缘的间距

方案2:富文本标签(单标签实现)

借助ggtext包的markdown渲染能力,给标签添加HTML样式定义:

library(ggtext)

# 预处理带样式的富文本标签
plot_data <- plot_data %>% 
  mutate(
    label = paste0(
      "<span style='color:darkblue;font-size:14px'>", region, "</span><br>",
      "<span style='color:grey60;font-size:12px'>", comma(amount,1), "</span><br>",
      "<span style='color:white;font-size:10px'>", percent(increase,1), "</span>"
    )
  )

plot_data %>% 
  ggplot(aes(area = amount, fill = region, label = label)) + 
  geom_treemap() +
  # 开启富文本渲染
  geom_treemap_text(rich = TRUE, padding.y = unit(2, "mm"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:06:01