科研常用AI(Adobe Illustrator,AI)拼接多张图,这里介绍个轻量级的Python工具。
粉丝问题提出
如果有以下4张图,如何把它们拼接在一张图中,
粉丝问题解决
通过Python patchworklib即可搞定,patchworklib通过|(代表左右排版)、/(代表上下排版)
轻松实现图形排列。
代码如下,
import matplotlib
import seaborn as sns
import patchworklib as pw
penguins = pd.read_csv('./sns_data/penguins.csv')
titanic = pd.read_csv('./sns_data/titanic.csv')
pw.overwrite_axisgrid() # 使用pw.load_seagorngrid,必须先开启pw.overwrite_axisgrid方法
# 核密度图
g0 = sns.displot(
penguins,
x="鳍长 (毫米)",
kind='kde',
hue="岛屿",
fill=True,
multiple="layer",
palette=["#006a8e", "#b1283a", "#a8a6a7"],
)
g0 = pw.load_seaborngrid(g0, label="g0") #每个子图使用使用pw.load_seagorngrid方法
# 分组boxplot
g1 = sns.catplot(data=titanic,
x="登船港口",
y="年龄",
hue="性别",
col="船票等级",
row="获救情况",
width=0.7,
linewidth=0.6,
kind="box",
palette=["#006a8e", "#b1283a"])
g1 = pw.load_seaborngrid(g1, label="g1",
figsize=(6, 6)) #每个子图使用使用pw.load_seagorngrid方法
# 边际图
g2 = sns.pairplot(data=penguins,
hue="性别",
palette=["#006a8e", "#b1283a"],
height=1.5,
aspect=1,
plot_kws=dict(color="#7995c4", alpha=1),
diag_kws=dict(color="#7995c4", alpha=1))
g2 = pw.load_seaborngrid(g2, label="g2")
# 矩阵图
g3 = sns.JointGrid(data=penguins,
x='喙长 (毫米)',
y='喙深 (毫米)',
hue='性别',
palette=["#006a8e", "#b1283a"])
g3.plot(sns.kdeplot, sns.histplot, alpha=.5, fill=True)
g3 = pw.load_seaborngrid(g3, label="g3") #每个子图使用使用pw.load_seagorngrid方法
#个性化设置
g0.case.set_title('图 A', x=0, y=1.0, loc="right")
g1.case.set_title('图 B', x=0, y=1.0, loc="right")
g2.case.set_title('图 C', x=0, y=1.0, loc="right")
g3.case.set_title('图 D', x=0, y=1.0, loc="right")
#拼图
patch0123 = (g0 | g1) / (g2 | g3)
patch0123.savefig() #类似plt.show()
看下效果,
patch3210 = (g3 | g2) / (g1 | g0) #换个顺序
patch3210.savefig()
patch3012 = (g3 | g0 | g1 ) / g2 #再换个顺序
patch3012.savefig()
❤️❤️分享一份原创“Python保姆级可视化教程”:12.3万字+530张图形+8000行代码+详细代码注释+学习交流群👉👉这个工具缓解了我的可视化焦虑