Python绘图进阶:掌握plt.subplots与plt.subplot的四大技巧

季宁
季宁
发布时间:2026-10-12| 2人浏览过
原创

本文深入解析Python中使用Matplotlib和Seaborn进行数据可视化的四个关键技巧。重点讲解plt.subplots()与plt.subplot()在创建多子图时的语法差异与应用场景,演示如何利用plt.tight_layout()自动解决标签重叠问题,以及如何通过plt.suptitle()为整体图表添加统一标题。通过实际代码示例,帮助开发者提升绘图效率与图表美观度。

数据集:

首先导入必要的库,并调整图表的默认样式以符合个人偏好。我们将基于提示数据集 Seaborn 内置的数据集进行演示:

import seaborn as sns # v0.11.2  
import matplotlib.pyplot as plt # v3.4.2  
sns.set(style='darkgrid', context='talk', palette='rainbow')df = sns.load\_dataset('tips')  
df.head()


技巧1: plt.subplots()

绘制多个子图的一种便捷方式是使用 plt.subplots() 。

以下是绘制两个并排子图的示例语法:

fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(10,4))  
sns.histplot(data=df, x='tip', ax=ax[0])  
sns.boxplot(data=df, x='tip', ax=ax[1]);

在此示例中,我们在同一画布上绘制了两个子图。我们可以对每个子图进行进一步的个性化定制。

例如,可以为每个子图单独设置标题:

fig, ax = plt.subplots(1, 2, figsize=(10,4))  
sns.histplot(data=df, x='tip', ax=ax[0])  
ax[0].set\_title("Histogram")  
sns.boxplot(data=df, x='tip', ax=ax[1])  
ax[1].set\_title("Boxplot");


通过循环将所有数值变量用相同的图表类型表示:

numerical = df.select\_dtypes('number').columnsfor col in numerical:  
 fig, ax = plt.subplots(1, 2, figsize=(10,4))  
 sns.histplot(data=df, x=col, ax=ax[0])  
 sns.boxplot(data=df, x=col, ax=ax[1]);


技巧2: plt.subplot()

另一种可视化多个图形的方法是使用 plt.subplot(),(注意末尾没有 's')。

其语法与前述方法略有不同:

plt.figure(figsize=(10,4))  
ax1 = plt.subplot(1,2,1)  
sns.histplot(data=df, x='tip', ax=ax1)  
ax2 = plt.subplot(1,2,2)  
sns.boxplot(data=df, x='tip', ax=ax2);


当我们希望为多个图形绘制相同类型的图表,并在单个视图中查看所有结果时,该方法尤为适用:

plt.figure(figsize=(14,4))  
for i, col in enumerate(numerical):  
 ax = plt.subplot(1, len(numerical), i+1)  
 sns.boxplot(data=df, x=col, ax=ax)


我们同样可以对子图进行定制,例如添加 title。

plt.figure(figsize=(14,4))  
for i, col in enumerate(numerical):  
 ax = plt.subplot(1, len(numerical), i+1)  
 sns.boxplot(data=df, x=col, ax=ax)   
 ax.set\_title(f"Boxplot of {col}")


通过以下对比,我们可以更好地理解两者的相似之处与区别。熟悉这两种方法很有必要,因为它们在不同场景下各有优势。

技巧3: plt.tight_layout()

在绘制多个图形时,经常会出现子图的标签与相邻子图发生重叠的情况,

如下图所示:

categorical = df.select\_dtypes('category').columnsplt.figure(figsize=(8, 8))  
for i, col in enumerate(categorical):  
 ax = plt.subplot(2, 2, i+1)  
 sns.countplot(data=df, x=col, ax=ax)


顶部两个图表的 x 轴变量名称被截断,右侧图的 y 轴标签与左侧子图重叠。使用 plt.tight_layout 可以方便地解决这一问题。

plt.figure(figsize=(8, 8))  
for i, col in enumerate(categorical):  
 ax = plt.subplot(2, 2, i+1)  
 sns.countplot(data=df, x=col, ax=ax)   
plt.tight\_layout()


效果看起来更加专业。

技巧4: plt.suptitle()

为整个图形添加统一标题:

plt.figure(figsize=(8, 8))  
for i, col in enumerate(categorical):  
 ax = plt.subplot(2, 2, i+1)  
 sns.countplot(data=df, x=col, ax=ax)   
plt.suptitle('Category counts for all categorical variables')  
plt.tight\_layout()

此外,您仍可根据需求自定义各个子图。例如,您可以继续为每个子图添加各自的标题。

到此这篇关于python绘图 四个绘图技巧的文章就介绍到这了,更多相关python 绘图技巧内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。