如何用R绘制带气泡的层级图?能否结合treemap与ggraph实现?
可以用treemap + ggraph实现这类树形图
当然可以!结合treemap和ggraph库完全能实现类似甚至和你展示的图表完全一致的效果——这类图表属于分层树形图(treemap),前者负责计算区块的布局逻辑(按层级、数值占比分块),后者负责高度定制化的可视化渲染,两者搭配刚好匹配需求。
实现思路与步骤:
- 准备层级数据:需要包含分层结构(比如大洲→国家)和对应数值(比如GDP总量)的数据集,确保数据能体现层级关系。
- 计算树形图布局:用
treemap包的treemap()函数,指定层级变量(比如大洲、国家)和权重变量(比如GDP),生成每个区块的位置、大小等布局数据(设置draw = FALSE可以只计算不绘图)。 - 用ggraph渲染可视化:将
treemap输出的布局数据转换为ggraph支持的格式,然后通过geom_treemap()绘制区块、geom_treemap_text()添加标签,还可以自定义颜色映射、标签样式、边框等细节,完全复刻目标图表的样式。
简单代码示例:
# 加载依赖库 library(treemap) library(ggraph) library(tidyverse) # 模拟层级数据(大洲-国家-经济总量) sim_data <- tibble( 大洲 = rep(c("亚洲", "欧洲", "美洲"), each = 3), 国家 = c("中国", "日本", "印度", "德国", "法国", "英国", "美国", "加拿大", "巴西"), GDP总量 = c(14.7, 5.1, 2.6, 3.8, 2.6, 2.7, 21.4, 1.7, 1.4) ) # 计算树形图布局 tm_layout <- treemap(sim_data, index = c("大洲", "国家"), vSize = "GDP总量", draw = FALSE) # 转换为ggraph可用的数据格式 tm_gg_data <- tm_layout$tm %>% mutate(层级 = factor(level, labels = c("大洲", "国家"))) # 绘制树形图 ggraph(tm_gg_data, layout = "treemap", weight = "area") + geom_treemap(aes(fill = 大洲)) + # 添加国家标签 geom_treemap_text(aes(label = 国家, size = GDP总量), place = "centre", colour = "white") + # 添加大洲标签(加粗) geom_treemap_text(aes(label = 大洲, size = area), subset = .(层级 == "大洲"), place = "centre", colour = "black", fontface = "bold") + # 自定义颜色配色 scale_fill_brewer(palette = "Set2") + # 移除默认背景与坐标轴 theme_void()
通过调整颜色方案、标签大小、字体样式、区块边框等参数,你可以完全复刻目标图表的视觉效果。如果需要更精细的控制(比如指定特定国家的颜色、调整标签位置避免重叠),可以在ggraph的图层参数中进一步设置。
内容的提问来源于stack exchange,提问作者cdcarrion
相关产品推荐
相关产品推荐

