如果想把多個圖合併放在一個圖裡,R語言 和 Python 都有對應的解決方案, 分別是patchwork包和patchworklib庫。
來源:Python大數據分析
01 問題
如果想把多個圖合併放在一個圖裡,如圖,該如何實現?
好在R語言 和 Python 都有對應的解決方案, 分別是patchwork包和patchworklib庫。
02 R語言
安裝
# install.packages("devtools")
devtools::install_github("thomasp85/patchwork")
兩個圖並排在一行,只需要匯入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
03 Python
Patchworklib 是與 matplotlib 相關的繪圖(簡單 matplotlib 繪圖、Seaborn 繪圖(軸級和圖形級)和plotnine 繪圖)的通用編輯器。這個庫的靈感來自於 ggplot2 的patchwork。因此,作為原始拼湊,使用者可以輕鬆地僅使用 /
和 |
對齊 matplotlib 圖。
Patchworklib 提供了該問題的解決方案。透過使用 patchworklib,任何型別的seaborn 和plotnine 圖都可以作為matplotlib 子圖進行處理。
安裝
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")
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
我是「數據分析那些事」。常年分享數據分析乾貨,不定期分享好用的職場技能工具。各位也可以關注我的Facebook,按讚我的臉書並私訊「10」,送你十週入門數據分析電子書唷!期待你與我互動起來~
文章推薦
◆跟資料打交道的人都得會的這8種資料模型,滿足工作中95%的需求
回顧十週入門數據分析系列文:
關注數據君的臉書:
我是「數據分析那些事」。常年分享數據分析乾貨,不定期分享好用的職場技能工具。按贊我的臉書,會有豐富資料包贈送唷!