You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过循环创建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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 00:02:08