如何使用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
相关产品推荐
相关产品推荐

