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

如何使用Matplotlib结合两个不同DataFrame绘制箱线图?

结合两个DataFrame列绘制箱线图的解决方案

没问题!我来帮你搞定把两个DataFrame里的列结合起来绘制箱线图的需求。这里有两种常用的实现方式,你可以根据自己的具体需求选择:

方法一:使用Seaborn(美观易读,适合分类对比)

Seaborn更适合处理带分类标识的数据,我们可以先把需要的列整理成长格式,再绘制箱线图:

import pandas as pd
from numpy import random
import matplotlib.pyplot as plt
import seaborn as sns

# 生成数据
df1 = pd.DataFrame(data = random.randn(5,2), columns = ['W','Y'])
df2 = pd.DataFrame(data = random.randn(5,2), columns = ['X','Y'])

# 情况1:对比两个DataFrame中的Y列
# 合并Y列并添加来源标识
combined_y = pd.DataFrame({
    '数值': pd.concat([df1['Y'], df2['Y']]),
    '来源': ['df1的Y列']*5 + ['df2的Y列']*5
})

# 绘制箱线图
sns.boxplot(x='来源', y='数值', data=combined_y)
plt.title('df1与df2中Y列的箱线图对比')
plt.show()

# ------------------------------

# 情况2:同时对比多个列(比如df1的W、df2的X,以及两个Y列)
# 整理所有需要的列
all_cols = pd.DataFrame({
    'df1_W': df1['W'],
    'df2_X': df2['X'],
    'df1_Y': df1['Y'],
    'df2_Y': df2['Y']
})

# 转换为长格式(Seaborn偏好的格式)
all_cols_long = all_cols.melt(var_name='列名', value_name='数值')

# 绘制箱线图
sns.boxplot(x='列名', y='数值', data=all_cols_long)
plt.title('多个列的箱线图对比')
plt.xticks(rotation=15)  # 旋转x轴标签避免重叠
plt.show()

方法二:使用Matplotlib原生(灵活直接)

如果你更习惯用Matplotlib原生绘图,可以直接传入数据列表来绘制:

import pandas as pd
from numpy import random
import matplotlib.pyplot as plt

# 生成数据
df1 = pd.DataFrame(data = random.randn(5,2), columns = ['W','Y'])
df2 = pd.DataFrame(data = random.randn(5,2), columns = ['X','Y'])

# 准备要绘制的数据和对应的标签
data_to_plot = [df1['W'], df2['X'], df1['Y'], df2['Y']]
labels = ['df1的W列', 'df2的X列', 'df1的Y列', 'df2的Y列']

# 绘制箱线图
plt.boxplot(data_to_plot, labels=labels)
plt.title('多列箱线图对比')
plt.ylabel('数值')
plt.xticks(rotation=15)
plt.show()

两种方法都能实现你的需求,Seaborn的图默认样式更美观,而Matplotlib原生则给你更多自定义的空间,你可以根据自己的喜好选择~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 06:23:49