使用patchworklib庫進(jìn)行多圖排版
( 點(diǎn)擊上方快速關(guān)注并設(shè)置為星標(biāo),一起學(xué)Python)
來源:大鄧和他的Python
一、問題
如果想把多個圖合并放在一個圖里,如圖,該如何實(shí)現(xiàn)

好在R語言 和 Python 都有對應(yīng)的解決方案, 分別是patchwork包和patchworklib庫。
二、R語言
安裝
# install.packages("devtools")
devtools::install_github("thomasp85/patchwork")
兩個圖并排在一行,只需要導(dǎo)入patchwork, 然后相加即可
library(ggplot2)
library(patchwork)
p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp))
p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear))
p1 + p2

兩行,第一行三個圖,第二行一個圖
p3 <- ggplot(mtcars) + geom_smooth(aes(disp, qsec))
p4 <- ggplot(mtcars) + geom_bar(aes(carb))
(p1 | p2 | p3) /
p4

三、Python
Patchworklib 是與 matplotlib 相關(guān)的繪圖(簡單 matplotlib 繪圖、Seaborn 繪圖(軸級和圖形級)和plotnine 繪圖)的通用編輯器。這個庫的靈感來自于 ggplot2 的patchwork。因此,作為原始拼湊,用戶可以輕松地僅使用 /和 | 對齊 matplotlib 圖。
Patchworklib 提供了該問題的解決方案。通過使用 patchworklib,任何類型的seaborn 和plotnine 圖都可以作為matplotlib 子圖進(jìn)行處理。安裝
pip3 install patchworklib
import patchworklib as pw
import seaborn as sns
fmri = sns.load_dataset("fmri")
ax1 = pw.Brick(figsize=(3,2))
sns.lineplot(x="timepoint", y="signal", hue="region", style="event", data=fmri, ax=ax1)
ax1.legend(bbox_to_anchor=(1.05, 1.0), loc='upper left')
ax1.set_title("ax1")
titanic = sns.load_dataset("titanic")
ax2 = pw.Brick(figsize=(1,2))
sns.barplot(x="sex", y="survived", hue="class", data=titanic, ax=ax2)
ax2.move_legend(new_loc='upper left', bbox_to_anchor=(1.05, 1.0))
ax2.set_title("ax2")
ax12 = ax1|ax2
ax12.savefig("ax12.png")

#省略 ax1、ax2、ax4繪制過程
ax124 = ax1|ax2|ax4
ax124.savefig("../img/ax124.png")

#省略 ax124、ax3、ax5繪制過程
ax12435 = ax124/(ax3|ax5)
ax12435.savefig("../img/ax12435.png")


推薦小碼哥新書!
小碼哥新手 《Python + Excel/Word/PPT一本通》 正式上市了!書中詳細(xì)介紹了零基礎(chǔ)用Python實(shí)現(xiàn)辦公自動化的各方面知識, 提高職場辦公效率,附贈PPT/源代碼/重點(diǎn)教學(xué)視頻講解和作者VIP一對一指導(dǎo)。
內(nèi) 容介紹 :《Python + Excel/Word/PPT 一本通》內(nèi)容介紹

掃碼購買
▼點(diǎn)擊閱讀原文,了解本書詳情
