如何在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
相关产品推荐
相关产品推荐

