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语言数据可视化之美》电子工业出版社

图片

### 回答1: 可以使用 matplotlib 模块的 savefig 函数将树状图保存为图片文件,或者使用 scipy.cluster.hierarchy.dendrogram 函数的参数 leaf_label_func 将树状图的参数保存到一个列表中。 ### 回答2: scipy.cluster.hierarchy.dendrogram函数生成树状图的参数包括层次聚类的结果、树的结构、颜色等信息。要保存这些参数,可以将它们保存为字典或文件。 一种方法是将参数保存为字典,然后将字典保存为文件。可以使用Python的pickle模块将字典保存为二进制文件,或使用json模块将字典保存为文本文件。 示例代码如下: ```python import json import pickle from scipy.cluster.hierarchy import dendrogram # 第一步,生成树状图的参数 # ... # 将参数保存为字典 params = { 'clusters': dendrogram_obj['color_list'], 'tree_structure': dendrogram_obj['dcoord'], # 其他参数... } # 第二步,将参数保存为文件 # Pickle模块保存为二进制文件 with open('dendrogram_params.pkl', 'wb') as f: pickle.dump(params, f) # Json模块保存为文本文件 with open('dendrogram_params.json', 'w') as f: json.dump(params, f) ``` 另一种方法是直接将生成的树状图保存为图片文件。可以使用Python的matplotlib库中的savefig函数将树状图保存为图片格式,如PNG、JPEG等。 示例代码如下: ```python import matplotlib.pyplot as plt from scipy.cluster.hierarchy import dendrogram # 第一步,生成树状图的参数 # ... # 第二步,绘制树状图 fig = plt.figure(figsize=(10, 5)) dendrogram(dendrogram_obj) plt.title('Dendrogram') plt.xlabel('Samples') plt.ylabel('Distance') # 第三步,保存树状图为图片文件 plt.savefig('dendrogram.png') ``` 以上是保存scipy.cluster.hierarchy.dendrogram函数生成的树状图的参数的两种方法。可根据需求选择适合的保存形式。 ### 回答3: 要保存scipy.cluster.hierarchy.dendrogram函数生成的树状图的参数,首先需要理解dendrogram函数的输出。该函数会返回一个字典,其中包含一些关键信息。 要保存树状图的参数,可以按照以下步骤进行操作: 1. 导入必要的库和模块: ```python import scipy.cluster.hierarchy as sch import matplotlib.pyplot as plt ``` 2. 使用dendrogram函数生成树状图: ```python linkage_matrix = sch.linkage(data, method='complete') # 计算层次聚类所需的链接矩阵 dendrogram = sch.dendrogram(linkage_matrix) # 生成树状图并返回相关信息 ``` 3. 将树状图的参数保存到变量中: ```python dist = dendrogram['dcoord'] # 保存垂直距离(dendrogram['dcoord']) link = dendrogram['icoord'] # 保存连线坐标(dendrogram['icoord']) ``` 4. 可选:绘制树状图并保存为图片: ```python plt.figure(figsize=(10, 5)) plt.title('Dendrogram') plt.xlabel('Samples') plt.ylabel('Distance') plt.plot(link, dist) plt.savefig('dendrogram.png') # 将树状图保存为图片 ``` 通过以上步骤,我们可以将树状图的参数保存到变量中,从而实现对其后续处理或分析。另外,我们还可以选择将树状图保存为图片,以备后续查看或分享。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值