pythonic生物人

matplotlib搞定进化树(Tree Plot)

树图(Tree Plot)是一种用于可视化层级关系或树状结构的图形。它通常用于展示从根节点到叶节点的分支结构,能够清晰地表示数据之间的层级关系、分类树、进化树等。

本节分享利用matplotlib结合toyplot和toytree绘制树图。

使用“3.2.14 tree数据集”,展示一个多子图树图案例。

# 22.1_01
# -*- encoding: utf-8 -*-
'''
未经过允许禁止转载!
@Author  :   公众号: pythonic生物人
@Desc    :   22.1 多子图树图
'''


import toytree
import toyplot
import toyplot.png

import matplotlib.pyplot as plt

# 准备数据
styles = ['n', 's', 'c', 'o', 'p', 'd']
titles = ['n', 's', 'c', 'o', 'p', 'd']

# 绘图
fig, axes = plt.subplots(2, 3, figsize=(18, 12), dpi=500)
axes = axes.flatten()
fig.patch.set_edgecolor("gray")
fig.patch.set_linewidth(1)
fig.patch.set_facecolor("white")

for i, (style, title) in enumerate(zip(styles, titles)):
    canvas = toyplot.Canvas(width=600, height=600)
    axes_toy = canvas.cartesian(show=False)  # 关闭toyplot坐标轴
    tree.draw(
        ts=style,  # 树的风格('n', 's', 'c', 'o', 'p', 'd' 等)
        axes=axes_toy,  # 指定绘图的ToyPlot坐标轴
        node_labels="support",  # 节点显示标签
        node_sizes=30,  # 节点背景框大小
        node_labels_style={"font-size": "20px"},  # 节点标签字体大小
        tip_labels_style={  # 树末端标签的样式
"fill": "#262626",  # 树末端标签填充颜色
"font-size": "25px",  # 树末端标签字体大小
"-toyplot-anchor-shift": "30px",  # 树末端标签与节点的距离
        })
# 保存 Canvas 为 HTML 临时文件并转换为 PNG
    toyplot.png.render(canvas, "temp_tree.png")
    img = plt.imread("temp_tree.png")  # 直接加载 SVG
    axes[i].imshow(img)  # 在 matplotlib 子图中显示
    axes[i].axis("off")  # 确保 matplotlib 子图坐标轴关闭

plt.tight_layout(pad=2.0, w_pad=0.5, h_pad=0.5)
fig.suptitle("不同种类树图", fontsize=30, weight="bold", y=1.03)
plt.show()

Image
-END-
推荐阅读:
👉Python matplotlib保姆级教程
👉保姆级matplotlib教程—详细目录
👉Python seaborn保姆级教程
👉保姆级seaborn教程:详细目录
图片
图片
图片
图片
图片

图片

图片

图片

图片

图片

图片

图片

加入学习(收费)

图片