matplotlib实现复杂子图布局

0. 背景描述

本文介绍基于matplotlib的复杂子图布局,本人其他适用Python/matplotlib绘图的文章可以点击这里。本文内容主要来自这里。公众号基算仿真。

1. 正文

subplot_mosaicMatplotlib 库中的一个功能,它允许你以一种相对简单的方式创建复杂的图形布局。

使用 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. 点评

这个功能目前还没有在实际工作中遇到过,但个人认为后期遇到的概率很大。我又担心回头忘记了,所以就把原文中的做法记录下来,以备后期查看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

George1415926

看着有用,请作者喝杯咖啡啦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值