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()
推荐阅读: 👉Python matplotlib保姆级教程 👉保姆级matplotlib教程—详细目录 👉Python seaborn保姆级教程 👉保姆级seaborn教程:详细目录
加入学习(收费)