如何通过循环创建Seaborn散点图子图(4×2网格布局)
实现4×2子图网格展示7个Seaborn散点图
直接修改代码为以下形式,通过plt.subplots创建子图布局,在循环中指定每个子图的绘制轴即可:
import matplotlib.pyplot as plt import seaborn as sns year = ['2018','2019','2020','2021','2022','2023','2024'] # 创建4行2列的子图布局,获取画布和轴对象数组 fig, axes = plt.subplots(nrows=4, ncols=2, figsize=(12, 16)) # 将二维轴数组展平为一维,方便循环索引 axes = axes.flatten() palette = { 'Q1': 'tab:blue', 'Q2': 'tab:green', 'Q3': 'tab:orange', 'Q4': 'tab:red', } for idx, Year in enumerate(year): # 指定当前子图的轴对象ax=axes[idx] sns.scatterplot(data=dfSumDate.loc[Year], x='Temperature', y='MeanEnergy', hue='Season', palette=palette, ax=axes[idx]) axes[idx].set_ylim(0,120) axes[idx].set_xlim(-5,30) axes[idx].set_title(Year) # 隐藏第8个未使用的子图 axes[7].axis('off') # 调整子图间距,避免重叠 plt.tight_layout() plt.show()
关键修改点:
- 用
plt.subplots(4,2)一次性创建所有子图,替代循环中重复创建单个图表 - 通过
ax=axes[idx]指定Seaborn绘图的目标子图轴 - 用
axes[idx].set_ylim()等方法替代原有的plt.ylim(),确保修改的是当前子图的属性 - 展平二维
axes数组,简化循环索引逻辑 - 隐藏最后一个空的子图,让布局更整洁
- 最后统一调用
plt.show(),而不是循环内每次调用
内容的提问来源于stack exchange,提问作者GPhil
相关产品推荐
相关产品推荐

