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

如何用Matplotlib将Boxplot+Histogram组合图按每行2组并排展示?

需求说明

当前代码会逐个生成箱线图+直方图的组合图,所有图纵向排列需滚动查看,希望修改代码实现每行2组组合图并排展示。

原代码如下:

cols=bank_data.select_dtypes(['int64','float64']).columns 
for i, variable in enumerate(cols):
  if variable != "CLIENTNUM":
   f, (ax_box, ax_hist) = plt.subplots(2, sharex=True, gridspec_kw={"height_ratios": (.15, .85)});
   # Add a graph in each part
   sns.boxplot(bank_data[variable], ax=ax_box);
   sns.histplot(bank_data[variable], bins=12, kde=True, stat='density',ax=ax_hist);
   ax_box.axvline(np.mean(bank_data[variable]),color='g',linestyle='-')
   ax_hist.axvline(np.mean(bank_data[variable]),color='g',linestyle='-')
   ax_hist.axvline(np.median(bank_data[variable]),color='y',linestyle='--')
   plt.tight_layout()

修改后的代码
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np

# 筛选数值型列并排除CLIENTNUM
target_cols = [col for col in bank_data.select_dtypes(['int64', 'float64']).columns if col != "CLIENTNUM"]
total_figs = len(target_cols)
# 计算所需行数:每行2个组合图,向上取整
row_count = (total_figs + 1) // 2

# 创建总画布:每行包含2个组合图,每个组合图占2行(箱线图+直方图)
fig, axes = plt.subplots(row_count * 2, 2, figsize=(16, 6 * row_count), 
                         gridspec_kw={"height_ratios": [0.15, 0.85] * row_count})

for idx, var in enumerate(target_cols):
    # 计算当前组合图在画布中的位置
    base_row = (idx // 2) * 2
    col_pos = idx % 2
    
    # 获取当前组合图的两个轴对象
    ax_box = axes[base_row, col_pos]
    ax_hist = axes[base_row + 1, col_pos]
    
    # 绘制箱线图
    sns.boxplot(bank_data[var], ax=ax_box)
    # 绘制直方图
    sns.histplot(bank_data[var], bins=12, kde=True, stat='density', ax=ax_hist)
    
    # 添加均值和中位数标记线
    mean_val = np.mean(bank_data[var])
    median_val = np.median(bank_data[var])
    ax_box.axvline(mean_val, color='g', linestyle='-')
    ax_hist.axvline(mean_val, color='g', linestyle='-')
    ax_hist.axvline(median_val, color='y', linestyle='--')
    
    # 设置标题和轴标签
    ax_box.set_title(f'{var} 分布')
    ax_box.set_xlabel('')  # 隐藏箱线图x轴标签,和直方图共享x轴
    ax_hist.set_xlabel(var)

# 调整布局避免元素重叠
plt.tight_layout()
plt.show()

核心改动说明
  1. 提前规划画布结构:先统计需要绘制的组合图数量,计算出画布的总行数(每行2个组合图),一次性创建大画布,避免循环中重复创建独立画布
  2. 定位子图位置:通过索引计算每个变量对应的箱线图、直方图在大画布中的坐标位置,实现按序排列
  3. 统一布局优化:统一设置标题、轴标签,调整画布尺寸,确保所有元素显示清晰不重叠

内容的提问来源于stack exchange,提问作者panda_newbie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 03:31:05