Python绘图进阶:掌握plt.subplots与plt.subplot的四大技巧
本文深入解析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 绘图技巧内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













