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

Seaborn子图绘制问题:3×2布局箱线图与小提琴图实现

解决3×2子图布局中Seaborn箱线图与小提琴图的结合问题

我看到你想要实现3行2列的子图布局——每行对应一个特征,左侧是箱线图,右侧是小提琴图,x轴固定为survival_status_after_5yrs。你的代码里有几个关键问题需要修正,我来一步步帮你解决:

问题分析

  • 你创建子图时写了ncols=3,但目标是3×2布局,应该改为ncols=2
  • plt.subplots()返回的是图对象和二维axes数组,需要用fig, axes = plt.subplots(...)来接收,而非单个axis变量
  • Seaborn的绘图函数(比如sns.boxplot)不需要用axis[i].plot()包裹,直接通过ax参数指定要绘制的子图即可
  • 循环中的索引逻辑有误,会导致数组越界

修正后的代码

import matplotlib.pyplot as plt
import seaborn as sns

# 取需要可视化的3个变量(根据你的数据结构调整)
features = list(df.columns.values)[:3]

# 创建3行2列的子图,设置合适的画布尺寸
fig, axes = plt.subplots(nrows=3, ncols=2, figsize=(12, 10))

# 遍历每个特征和对应的行索引
for i, feature in enumerate(features):
    # 左侧子图:箱线图,指定绘制到第i行第1列的子图
    sns.boxplot(data=df, x='survival_status_after_5yrs', y=feature, ax=axes[i, 0])
    axes[i, 0].set_title(f'Box Plot: {feature}')
    
    # 右侧子图:小提琴图,指定绘制到第i行第2列的子图
    sns.violinplot(data=df, x='survival_status_after_5yrs', y=feature, ax=axes[i, 1])
    axes[i, 1].set_title(f'Violin Plot: {feature}')

# 自动调整子图间距,避免元素重叠
plt.tight_layout()
plt.show()

关键说明

  • axes是一个3×2的二维数组,axes[i, 0]对应第i行第1列的子图,axes[i, 1]对应第i行第2列的子图
  • 通过Seaborn绘图函数的ax参数,直接将图绑定到指定子图,这是Seaborn与Matplotlib子图结合的标准用法
  • plt.tight_layout()会自动优化子图布局,让标题、坐标轴标签都清晰显示

这样就能完美实现你想要的3×2布局,每行对应一个变量的箱线图和小提琴图啦!

内容的提问来源于stack exchange,提问作者Maagalam HARSHA VARDHAN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:24:10