从数据清洗到可视化,往往要在不同工具间反复横跳。
Patchworklib 就是来解决这个痛点的——它专为拼合 Seaborn 图表而生,能把多张独立的统计图无缝拼接成一张出版级大图,尤其适合制作数据报告和多变量对比看板。
📦 快速安装与基础拼图
先装好这个模块。它依赖 matplotlib 和 seaborn,下面的命令会一并处理干净。
!pip install patchworklib
安装完成后没报错,就说明环境准备妥当了。
✨ 单图转换:把 Seaborn 图变成积木块
任何 Seaborn 图表都得先转为 Brick 对象,才能参与拼接。我们画一张企鹅体重的直方图试试水。
import patchworklib as pw
import seaborn as sns
penguins = sns.load_dataset("penguins")
ax = sns.histplot(penguins, x="body_mass_g", hue="species")
brick1 = pw.Brick(ax, label="hist")
运行后,屏幕上会先弹出直方图,同时变量 brick1 已经保存了这个“积木块”,随时可以拿去和别人组合。
🔗 横向并排:一行代码搞定两张图
想把两张图左右放在一起,只需用 “|” 运算符。这里再补一张嘴峰长度的箱线图,然后拼到刚才的直方图右边。
ax2 = sns.boxplot(penguins, x="species", y="bill_length_mm")
brick2 = pw.Brick(ax2, label="box")
combined = brick1 | brick2
combined.savefig("side_by_side.png")
执行完这段,两张图被紧凑地并排放在一个画布里,并且保存成了图片文件。这就是 “|” 运算符的魔力。
⬇️ 纵向堆叠:用 “/” 划分区域
如果画面是上下的关系,把运算符换成 “/” 就行。下面的代码会把箱线图挪到直方图下方,形成纵向排版。
stacked = brick1 / brick2
stacked.savefig("stacked.png")
现在两张图在垂直方向对齐,特别适合用来对比同一组数据的不同维度。
🧩 复杂网格:先拼行再组列
真实场景里网格往往更复杂。patchworklib 支持先拼出几行,再按列组合。下面我们手动创建第三张点图,拼出一个2×2的布局。
ax3 = sns.scatterplot(penguins, x="bill_length_mm", y="bill_depth_mm", hue="species")
brick3 = pw.Brick(ax3, label="scatter")
row1 = brick1 | brick2
row2 = brick3 | brick1
grid = row1 / row2
grid.savefig("dashboard.png")
第一行放直方图和箱线图,第二行放散点图和直方图的复本,最终得到一个规整的2×2仪表盘。
整个过程没有调整坐标轴,但全局字体和标题可以通过 matplotlib 的 rcParams 统一设定,比 ggplot2 的 patchwork 包更贴近 Python 生态。
🆚 优势对比分析
跟 matplotlib 的 subplots 相比,patchworklib 最大优势是语法直观,“|”和“/”接近自然思维,不用反复算网格坐标。
劣势也很明显:高度定制时仍需回退到原生的 Axes 对象调整细节。建议日常探索分析用它快速出图,最终精修再配合 matplotlib 微调。
📝 写在最后
Patchworklib 把拼图变得像搭积木一样简单,希望你动手试试,把散落的图表组合成自己的数据故事。
有任何拼图奇技或者踩坑经历,欢迎在评论区唠一唠,咱们一起把 Python 可视化玩得更溜。