Python Matplotlib子图绘制详解:plt.subplot与plt.subplots用法及坐标轴修改

许南星
许南星
发布时间:2026-10-16 | 5人浏览过
原创

本文详细解析Python中Matplotlib库绘制子图的两种核心方法:plt.subplot与plt.subplots。通过对比两者在参数设置、返回值及代码结构上的差异,深入讲解如何高效管理画布与坐标轴。同时,文章提供了修改子图坐标轴标签、刻度、范围及标题的具体代码示例,帮助开发者掌握独立控制每个子图样式的高级技巧。

前言

在使用Python的Matplotlib库进行数据可视化时,偶尔会发现绘制子图主要有两种方式:plt.subplot和plt.subplots。本文将深入探讨这两种方法的具体区别、使用场景以及常用函数的操作细节。

plt.figure的主要功能是定义一个整体的画布,允许用户设置画布的尺寸、分辨率等属性。例如,可以通过指定参数来初始化画布。

fig = plt.figure(figsize=(16,16),dpi=300)  # 初始化一张画布

plt.plot()函数直接在当前活跃的坐标轴(axes)上进行绘图操作,因此必须确保当前激活的是目标坐标轴。

理解了上述基础知识后,我们可以进一步分析subplot和subplots的具体用法。

plt.subplot

fig = plt.figure(figsize=(12, 4), dpi=200)
for i in range(len(img)):
    plt.subplot(1, len(img),i+1)
    plt.imshow(img[i])
plt.show()

plt.subplot的作用是指定子图在网格中的位置。例如,若总布局为1行10列,该函数用于指定当前子图位于第几个位置。

使用此函数时,必须先定义一个整体画布,因为subplot函数本身无法直接更改画布的大小和分辨率。因此,必须通过fig = plt.figure(figsize=(12, 4), dpi=200)预先定义画布的相关设置。

此外,后续对子图的便捷操作可以直接使用plt命令,以获取当前活跃的图层进行绘图。

plt.subplots

fig, ax = plt.subplots(1, len(img), figsize=(15, 10))
for i in range(len(img)):
    ax[i].imshow(img[i])
plt.show()

使用plt.subplots函数时,可以直接在该函数内部设置子图的布局信息。

该函数返回两个变量:一个是Figure实例fig,代表整个图像;另一个是AxesSubplot实例ax,代表坐标轴和绘制的子图。可以通过下标获取所需的子区域。

后续对子图进行操作时,可以直接使用ax[i].imshow(img[i])等方式进行绘制。

与subplot的主要区别在于:(1)不需要通过plt来操作图层,每个子图都有指定的axes对象;(2)subplots的调用通常写在for循环外部,而subplot的调用写在循环内部。根本原因在于subplots在调用时已指定绘制多少个子图,因此ax数组已预先准备好,而subplot每次调用仅绘制一个子图,未预先指定整体布局。

subplot和subplots均可实现子图绘制功能,但subplots预先规划好了画板,返回一个坐标轴数组对象;而subplot每次只能返回一个坐标对象。此外,subplots还可以直接指定画板的大小。

坐标轴修改

我们通常需要修改坐标轴的大小、刻度等信息,无论是子图还是一张大图。下面来看subplots和subplot在修改坐标方面的差异。

使用plt修改坐标时,直接调用plt.xlabel()、plt.ylabel()、plt.xlim()、plt.ylim()等函数即可。但axes对象与plt不同,axes需要加上set前缀,例如:axes.set_xlabel()、axes.set_xlim(),这一点需要特别注意。

对于修改子图的坐标轴信息,subplots显然更方便,因为它拥有独立的axes对象,更便于让每个子图的坐标轴设置不同。例如,可以通过ax[i].set_xlabel()单独设置。

fig, ax = plt.subplots(1, len(img), figsize=(15, 10))
for i in range(len(img)):
    ax[i].imshow(img[i])
    ax[i].set_xlabel("test csdn")
#如果要单独修改坐标轴
ax[5].set_xlabel("test csdn")
plt.show()

如果是使用subplot修改坐标,参考代码如下。

fig = plt.figure(figsize=(12, 4), dpi=200)
for i in range(len(img)):
    plt.subplot(1, len(img),i+1)
    plt.imshow(img[i])
    plt.xlabel("csdn test")
plt.show()

当然,subplot也可以有返回值,但这个返回值是一个一个返回的,并不是像subplots那样一次性返回所有子图的坐标轴对象。

fig = plt.figure(figsize=(12, 4), dpi=200)
for i in range(len(img)):
    ax=plt.subplot(1, len(img),i+1)
    #或者这样
    # ax = plt.gca()  获取当前活跃的子图层
    plt.imshow(img[i])
    ax.set_xlabel("csdn test")  #其实这样还是没法单个子图修改
plt.show()

xlabel、ylabel:用于设置横轴、纵轴的标签及字体大小。

例如plt.xlabel("csdn test", fontsize=20)

xlim、ylim:用于设置x、y坐标轴的起始点和结束点(即显示范围)。

例如plt.xlim(0,50) plt.ylim(0,60)

xticks、yticks:用于设置坐标轴刻度的字体大小。

例如plt.xticks(labelsize=20)

title:用于设置图片的标题。

例如 plt.title(“csdn test”)

总结

到此这篇关于Python绘制子图技巧之plt.subplot、plt.subplots及坐标轴修改的文章就介绍到这了,更多相关Python plt.subplot、plt.subplots及坐标轴修改内容请搜索本站以前的文章或继续浏览下面的相关文章,希望大家以后多多支持本站!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表