FigDraw 16. SCI 文章绘图之树形图(Dendrogram)

图片

点击关注,桓峰基因

桓峰基因

生物信息分析,SCI文章撰写及生物信息基础知识学习:R语言学习,perl基础编程,linux系统命令,Python遇见更好的你

136篇原创内容

公众号

桓峰基因公众号推出基于R语言绘图教程并配有视频在线教程,目前整理出来的教程目录如下:

FigDraw 1. SCI 文章的灵魂 之 简约优雅的图表配色
FigDraw 2. SCI 文章绘图必备 R 语言基础
FigDraw 3. SCI 文章绘图必备 R 数据转换
FigDraw 4. SCI 文章绘图之散点图 (Scatter)
FigDraw 5. SCI 文章绘图之柱状图 (Barplot)
FigDraw 6. SCI 文章绘图之箱线图 (Boxplot)
FigDraw 7. SCI 文章绘图之折线图 (Lineplot)
FigDraw 8. SCI 文章绘图之饼图 (Pieplot)
FigDraw 9. SCI 文章绘图之韦恩图 (Vennplot)
FigDraw 10. SCI 文章绘图之直方图 (HistogramPlot)
FigDraw 11. SCI 文章绘图之小提琴图 (ViolinPlot)
FigDraw 12. SCI 文章绘图之相关性矩阵图(Correlation Matrix)
FigDraw 13. SCI 文章绘图之桑葚图及文章复现(Sankey)
FigDraw 14. SCI 文章绘图之和弦图及文章复现(Chord Diagram)
FigDraw 15. SCI 文章绘图之多组学圈图(OmicCircos)
FigDraw 16. SCI 文章绘图之树形图(Dendrogram)


这期给大家介绍一下精美的树形图怎么绘制,以及不同形状的树形图完美的绘制出来放在自己的文章中非常漂亮!

图片

前言

树形图(dendrogram )是表示连续合并的每对类之间的属性距离的示意图。为避免线交叉,示意图将以图形的方式进行排布,使得要合并的每对类的成员在示意图中相邻。树形图工具采用等级聚类算法。程序首先会计算输入特征文件中每对类之间的距离。然后迭代式地合并最近的一对类,完成后继续合并下一对最近的类,直到合并完所有的类。在每次合并后, 每对类之间的距离会进行更新。合并类特征时采用的距离将用于构建树形图。大概有4种不同类型的树形图,分别为:

  1. 纵向树形图

  2. 横向树形图

  3. 环形树形图

  4. 进化树形图

软件安装

这期整理了四个软件包用于绘制树形图,包括 ggdendro,ggraph,factoextra,circlize,直接安装即可。

if (!require(ggdendro)) install.packages("ggdendro")
if (!require(ggdendro)) install.packages("ggraph")
if (!require(factoextra)) install.packages("factoextra")
if (!require(circlize)) install.packages("circlize")

数据读取

因为我们使用四个软件包里面的给的例子,所有不同的软件包绘制树形图可能使用的不同的数据,具体包含如下三个数据集,都是大家经常使用的数据集。

data(USArrests)
head(USArrests)
##            Murder Assault UrbanPop Rape
## Alabama      13.2     236       58 21.2
## Alaska       10.0     263       48 44.5
## Arizona       8.1     294       80 31.0
## Arkansas      8.8     190       50 19.5
## California    9.0     276       91 40.6
## Colorado      7.9     204       78 38.7
data(iris)
head(iris)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa
data(mtcars)
head(mtcars)
##                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
## Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

实例解析

实际的例子来自软件包自带的例子,所有测试数据不需要下载,直接data()加载数据即可,每个软件包的函数绘制出来的图形都非常与众不同,直接上代码了。

1. ggdendrogram {ggdendro}

Creates dendrogram plot using ggplot. Description This is a convenience function Usage ggdendrogram( data, segments = TRUE, labels = TRUE, leaf_labels = TRUE, rotate = FALSE, theme_dendro = TRUE, … )

1. 纵向树形图
library(ggdendro)
library(ggplot2)
data(USArrests)
hc <- hclust(dist(USArrests), "ave")

# Demonstrate plotting directly from object class hclust
p <- ggdendrogram(hc, rotate = FALSE)
print(p)

图片

2. 横向树形图
ggdendrogram(hc, rotate = TRUE) + labs(title = "Dendrogram in ggplot2")

图片

2. ggraph {ggraph}

Create a ggraph plot Description This function is the equivalent of ggplot2::ggplot() in ggplot2. It takes care of setting up the plot object along with creating the layout for the plot based on the graph and the specification passed in. Alternatively a layout can be prepared in advance using create_layout and passed as the data argument. See Details for a description of all available layouts.

将参数layout设置为dendrogram,既可以绘制树形图了。

1. 环形树形图
library(ggraph)
require(tidygraph)
irisDen <- hclust(dist(iris[1:4], method = "euclidean"), method = "ward.D2") %>%
    as_tbl_graph() %>%
    mutate(class = sample(letters[1:3], n(), TRUE)) %>%
    activate(edges) %>%
    mutate(class = sample(letters[1:3], n(), TRUE))

ggraph(irisDen, "dendrogram", circular = TRUE) + geom_edge_elbow2(aes(colour = node.class)) +
    theme_bw()

图片

2. 纵向树形图
ggraph(irisDen, "dendrogram") + geom_edge_elbow2(aes(colour = node.class)) + theme_bw()

图片

3. 调整高度
ggraph(irisDen, "dendrogram", height = height) + geom_edge_elbow0(aes(colour = class)) +
    theme_bw()

图片

3. fviz_dend {factoextra}

Enhanced Visualization of Dendrogram Description Draws easily beautiful dendrograms using either R base plot or ggplot2. Provides also an option for drawing a circular dendrogram and phylogenic trees.

1. 纵向树形图
dd <- dist(scale(datasets::mtcars), method = "euclidean")
hc <- hclust(dd, method = "ward.D2")

fviz_dend(hc, k = 4, # 聚类的类别数目为4
          cex = 0.8, # 数据标签的字体大小
          k_colors = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
          color_labels_by_k = FALSE, # 数据标签也根据颜色设定
          rect_border = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
          rect = TRUE, # 使用不同颜色的矩形框标定类别
          rect_fill = TRUE)

图片

2. 横向向树形图
fviz_dend(hc, k = 4, cex = 0.8, horiz = TRUE, 
          k_colors = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),# k_colors = "jco", 
          color_labels_by_k = FALSE, # 数据标签也根据颜色设定
          rect_border = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
          rect = TRUE,rect_fill = TRUE)

图片

3. 环形树形图
par(mar = rep(300,4))
fviz_dend(hc, cex = 0.8, k = 4, 
          color_labels_by_k = FALSE, # 数据标签也根据颜色设定
          k_colors = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
          type = "circular",#phylogenic",
          #labels_track_height = 0.1,
          repel = TRUE,
          rect_lty = 0.5)

图片

4. 进化树形图
par(mar = rep(300,4))
fviz_dend(hc, cex = 1, k = 4, 
          k_colors = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
          type = "phylogenic",
          color_labels_by_k = FALSE, # 数据标签也根据颜色设定
          labels_track_height = 0.1,
          repel = TRUE,
          rect_lty = 0.5)

图片

4. circlize_dendrogram {circlize}

circlize_dendrogram就是绘制环形树形图,这个软件包在我们介绍和弦图时都用使用过FigDraw 14. SCI 文章绘图之和弦图及文章复现(Chord Diagram) 具体可以参考桓峰基因公众号教程。

Plot a circlized dendrograms Description Plot a circlized dendrograms using the circlize package (must be installed for the function to work). This type of plot is also sometimes called fan tree plot (although the name fan-plot is also used for a different plot in time series analysis), radial tree plot, polar tree plot, circular tree plot, and probably other names as well.

library(dendextend)
dd <- dist(scale(datasets::mtcars), method = "euclidean")
hc <- hclust(dd, method = "ward.D2")
dend <- as.dendrogram(hc)
# modify the dendrogram to have some colors in the branches and labels
dend <- dend %>%
    color_branches(k = 4, col = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"))  # %>% 
# color_labels(k=4,col= c('#2E9FDF', '#00AFBB', '#E7B800', '#FC4E07'),
# color_labels_by_k = TRUE)

# plot the radial plot
par(mar = rep(0, 4))
# circlize_dendrogram(dend, dend_track_height = 0.8)
circlize_dendrogram(dend, labels_track_height = 0.6, dend_track_height = 0.3, size = 3)

图片

软件包里面自带的demo,我这里都展示了一遍为了方便大家选择适合自己的图形,另外需要代码的将这期教程转发朋友圈,并配文“学生信,找桓峰基因,铸造成功的你!”即可获得!

桓峰基因,铸造成功的您!

有想进生信交流群的老师可以扫最后一个二维码加微信,备注“单位+姓名+目的”,有些想发广告的就免打扰吧,还得费力气把你踢出去!

References:
  1. 张杰 《R语言数据可视化之美》电子工业出版社

图片

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值