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

如何将两个Pandas箱线图并排展示?或按变量分组对比?

问题解答

不需要额外找其他Python库,用Pandas结合Matplotlib就能实现你要的两种效果——毕竟Pandas的绘图功能本身就是基于Matplotlib实现的,之前只显示第二幅图是因为默认每次调用boxplot()都会新建画布,覆盖了之前的内容。

方案一:两幅箱线图并排展示

通过Matplotlib创建多子图布局,分别在不同子图中绘制两个数据框的箱线图:

import matplotlib.pyplot as plt
import pandas as pd

# 假设df1、df2是你的目标数据框
fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(12, 6))

# 在第一个子图绘制df1的箱线图
df1.boxplot(ax=ax1)
ax1.set_title('df1 变量箱线图')
ax1.tick_params(axis='x', rotation=45)  # 旋转x轴标签避免重叠

# 在第二个子图绘制df2的箱线图
df2.boxplot(ax=ax2)
ax2.set_title('df2 变量箱线图')
ax2.tick_params(axis='x', rotation=45)

plt.tight_layout()  # 自动调整子图间距
plt.show()

方案二:每个变量单独对比(10幅图,每幅含两个数据框的对应变量箱线图)

循环遍历每个变量,将两个数据框的对应变量数据合并后绘制对比箱线图,你可以选择一次性展示所有对比图,或者逐个生成:

一次性展示所有10个对比图

import matplotlib.pyplot as plt
import pandas as pd

variables = df1.columns.tolist()
# 创建2行5列的子图布局(适配10个变量)
fig, axes = plt.subplots(nrows=2, ncols=5, figsize=(15, 8))
axes = axes.flatten()  # 把二维子图数组转为一维,方便循环遍历

for idx, var in enumerate(variables):
    # 合并两个数据框的当前变量数据
    combined_data = pd.DataFrame({
        'df1': df1[var],
        'df2': df2[var]
    })
    # 在对应子图绘制对比箱线图
    combined_data.boxplot(ax=axes[idx])
    axes[idx].set_title(f'变量 {var} 对比')

plt.tight_layout()
plt.show()

逐个生成并展示对比图

如果不想一次性展示所有图,也可以循环中单独创建画布:

import matplotlib.pyplot as plt
import pandas as pd

variables = df1.columns.tolist()

for var in variables:
    combined_data = pd.DataFrame({
        'df1': df1[var],
        'df2': df2[var]
    })
    combined_data.boxplot()
    plt.title(f'变量 {var} 对比')
    plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 19:10:32