# A tibble: 57 x 3
id value parent
<chr> <int> <chr>
1 Name1 62 group1
2 Name2 25941 group1
3 Name3 23524 group1
4 Name4 12512 group1
5 Name5 90 group1
6 Name6 7642 group1
7 Name7 1646 group1
8 Name8 1973 group1
9 Name9 4665 group1
10 Name10 1561 group1
# i 47 more rows
R语言如何绘制矩形树状图
前言
此篇是R语言undefined包绘制矩形树状图的教程。
什么是矩形树状图?
矩形树形图是一种用于展示层次关系数据的可视化方式。
它将数据以矩形的形式呈现,并通过树形结构将不同数据项之间的关联展现出来。
这种图表可以帮助人们更直观地理解数据之间的联系和组织结构,适用于各种领域的数据分析和展示。
绘图前的数据准备
demo数据可以在https://www.r2omics.cn/res/demodata/treemap2.txt下载。
在此示例数据汇总,parent和id列用于构建树状结构(以有多个列名,用于构建树状结构),value用来映射矩形大小和颜色。
R语言如何绘制矩形树状图
# 代码来源:https://www.r2omics.cn/
# 加载包
library(tidyverse)
library(treemapify) #从github上安装,devtools::install_github("wilkox/treemapify")
# 读取数据
= read.delim("https://www.r2omics.cn/res/demodata/treemap2.txt")
df
# 由treemapify函数计算矩形的位置
<- treemapify(df,
treeMapData area = "value", # 面积映射
subgroup = "parent", # 第1层映射
subgroup2="id", # 第2层映射
# subgroup3="", # 第3层映射
layout = "squarified", # 布局
start = "bottomleft", # 控制起始位置。bottomleft topleft topright bottomright
xlim = c(0, 1), # 控制x轴的范围,通过xlim和ylim可以设置最后矩形的长宽比例
ylim = c(0, 1)
)
# 计算每个小矩形的面积,如果面积小于0.01则不标记
= treeMapData %>%
treeMapPlot mutate(Area = (xmax-xmin)*(ymax-ymin)) %>%
mutate(label = ifelse(Area<0.01,"",id))
# 为了标记最外层,需要计算标记的位置。
# 从 treeMapData 数据集中提取出每个父节点的最小和最大坐标信息,并将其合并到一个新的数据集 parentLabel中。
= treeMapData %>%
parentLabelMin group_by(parent) %>%
slice_min(xmin) %>%
slice_min(ymin,with_ties = F) %>%
ungroup() %>%
select(parent,xmin,ymin)
= treeMapData %>%
parentLabelMax group_by(parent) %>%
slice_max(xmax) %>%
slice_max(ymax,with_ties = F) %>%
ungroup() %>%
select(parent,xmax,ymax)
= full_join(parentLabelMin,parentLabelMax)
parentLabel
# 绘图
ggplot(treeMapPlot)+
geom_rect(aes(xmin=xmin,xmax=xmax,ymin=ymin,ymax=ymax,fill=parent),colour="black")+ # 根据坐标,绘制矩形
geom_label(aes(x=(xmin+xmax)/2,y=(ymin+ymax)/2,label=parent),data=parentLabel,size=5,fill="white",alpha=0.5)+ # 标记第1层文本
geom_text(aes(x=(xmin+xmax)/2,y=(ymin+ymax)/2,label=label,size=Area))+ # 标记第2层文本
scale_size(range=c(0,5))+ # 调整标记的大小
theme_void()+
scale_fill_brewer(palette = "Set1")+ # 填充调色板
coord_fixed()+ # 使x轴和y轴比例尺相同
theme(legend.position = "none") # 不显示图例