0. 背景描述
本文介绍基于matplotlib的复杂子图布局,本人其他适用Python/matplotlib绘图的文章可以点击这里。本文内容主要来自这里。公众号基算仿真。
1. 正文
subplot_mosaic
是 Matplotlib
库中的一个功能,它允许你以一种相对简单的方式创建复杂的图形布局。
使用 subplot_mosaic
, 你可以通过指定一个字符串的 “马赛克” 来定义子图(subplots)的布局。每个字符代表一个子图的位置,相同的字符代表同一个子图。
这种方式比传统的 subplot 方法更灵活,特别是在创建非标准或不规则布局的时候。
例如,如果你想创建下图所示的子图格式,你可以使用如下的马赛克模式:
subplot_mosaic(
"""
ABD
CCD
"""
)
此处使用了“A、B、C、D”指代了每个子图的位置,同理可使用不同的名称进行指代,只要保持正确的相对位置关系即可。
如果遇到需要空出位置的情况,使用.
代表空白位置即可。
subplot_mosaic(
"""
A.C
BBB
.D.
"""
)
2. 案例展示
import matplotlib.pyplot as plt
import numpy as np
# 示例数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
data3 = np.random.normal(size=1000)
data4 = np.random.rand(10, 5)
# 定义复杂、不规则的子图布局
layout = [
["line plot", "scatter plot", "scatter plot"],
["line plot", "histogram", "box plot"],
["line plot", "histogram", "box plot"]
]
# 创建子图
fig, axs = plt.subplot_mosaic(layout, figsize=(12, 8))
# 第一个子图:折线图
axs['line plot'].plot(x, y1)
axs['line plot'].set_title('Sin(x) Line Plot')
# 第二个子图:散点图
axs['scatter plot'].scatter(x, y2)
axs['scatter plot'].set_title('Cos(x) Scatter Plot')
# 第三个子图:直方图
axs['histogram'].hist(data3, bins=20)
axs['histogram'].set_title('Histogram')
# 第四个子图:箱线图
axs['box plot'].boxplot(data4)
axs['box plot'].set_title('Box Plot')
plt.tight_layout()
plt.show()
3. 点评
这个功能目前还没有在实际工作中遇到过,但个人认为后期遇到的概率很大。我又担心回头忘记了,所以就把原文中的做法记录下来,以备后期查看。