Matplotlib 子图

Matplotlib 子图函数

在 Matplotlib 库中,我们可以使用 subplot() 函数在来同时绘制多个子图。

语法:

plt.subplot(rows, cols, index)

说明:

subplot() 函数有 3 个参数。rows 是行数,cols 是列数,index 是子图位置。其中,index 的值是从 1 开始到 rows × cols 结束。

示例 1:Matplotlib 绘制子图

import matplotlib.pyplot as plt

# 设置
plt.rcParams['font.family'] = ['SimHei', 'PingFang SC'] 
plt.rcParams['axes.unicode_minus'] = False

# 绘制折线图
def drawplot():
    x = [1, 2, 3, 4]
    y = [16, 15, 18, 17]
    plt.plot(x, y)
    plt.title('折线图')  
    plt.xlabel('x轴标题')         
    plt.ylabel('y轴标题')  

plt.subplot(2, 2, 1)
drawplot()

# 显示
plt.show()

运行之后,效果如下图所示。

Matplotlib绘制子图

分析:

plt.subplot(2, 2, 1) 表示将画布划分为 2 × 2 = 4 个子区域,此时整个画布布局如下图所示。这里的 1 表示在第 1 个区域中绘制当前图表。subplot() 函数的前 2 个参数用于确定画布的布局(有多少行多少列),最后一个参数用于定义在哪个子区域绘图。

Matplotlib子图的画布布局

当我们将 plt.subplot(2, 2, 1) 改为 plt.subplot(2, 2, 2),此时效果如下图所示。当将 plt.subplot(2, 2, 1) 改为 plt.subplot(2, 2, 3),此时效果如下图所示。

Matplotlib子图在右上角

Matplotlib子图在左下角

此外需要清楚的是,对于 subplot() 函数来说,它其实有 2 种语法方式。对于这个例子来说,下面 2 种方式是等价的。

# 方式1
plt.subplot(2, 2, 1)

# 方式2
plt.subplot(221)

Matplotlib 子图案例

接下来我们尝试绘制一个 2 × 2 的组合图表,也就是在同一张画布上绘制 4 种不同的图表:折线图散点图柱状图饼状图

示例 2:Matplotlib 子图的应用

import matplotlib.pyplot as plt

# 设置
plt.rcParams['font.family'] = ['SimHei', 'PingFang SC'] 
plt.rcParams['axes.unicode_minus'] = False

# 绘制折线图
def drawplot():
    x = [1, 2, 3, 4]
    y = [16, 15, 18, 17]
    plt.plot(x, y)

# 绘制散点图
def drawscatter():
    x = [1, 2, 3, 4, 5, 6, 7, 8]
    y = [15, 12, 14, 12, 11, 14, 13, 12]
    plt.scatter(x, y)

# 绘制柱形图
def drawbar():
    x = [1, 2, 3, 4, 5]
    y = [12, 25, 16, 23, 10]
    plt.bar(x, y)

# 绘制饼状图
def drawpie():
    x = [8.9, 4.1, 12.1, 8.5, 11.5]
    movies = ['蜘蛛侠', '蝙蝠侠', '钢铁侠', '毒液', '海王']
    plt.pie(x,
        labels = movies,
        explode = (0.1, 0, 0, 0, 0),
        autopct = '%1.1f%%'
    )

# 绘图
plt.subplot(2, 2, 1)
drawplot()
plt.subplot(2, 2, 2)
drawscatter()
plt.subplot(2, 2, 3)
drawbar()
plt.subplot(2, 2, 4)
drawpie()

# 调整布局
plt.tight_layout()
# 显示图表
plt.show()

运行之后,效果如下图所示。

Matplotlib子图包含多种图表

分析:

这个例子代码虽然比较多,但是逻辑是非常清晰简单的。其中 plt.tight_layout() 用于调整子图之间的布局,如果没有这一句代码,子图之间就可能出现重叠的情况。

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号