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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 03:25:46