R Studio双变量箱线图绘制求助:分层级展示Adult与Baby距离数据
解决方案:同图展示不同Level下Adult和Baby的箱线图
要实现这个需求,核心是把宽格式数据表转换为长格式,再用Seaborn(或Matplotlib)绘制分组箱线图。以下是完整代码示例:
步骤1:导入依赖库
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt
步骤2:准备数据(替换为你的真实数据)
# 示例数据,直接替换成你自己的DataFrame即可 df = pd.DataFrame({ 'Levels': [1,1,1,1,1,2,2,2,2,2], 'Adult': [1.2, 1.5, 1.3, 1.7, 1.4, 2.1, 2.3, 2.0, 2.5, 2.2], 'Baby': [0.8, 0.9, 1.0, 0.7, 0.9, 1.5, 1.6, 1.4, 1.7, 1.5] })
步骤3:转换数据格式
Seaborn的箱线图更适配长格式数据,用melt函数把原表的Adult和Baby列合并为一个分类列:
df_long = df.melt( id_vars='Levels', # 保留作为分组依据的列 var_name='Group', # 新分类列的名称(对应Adult/Baby) value_name='Distance' # 数值列的名称(距离数据) )
步骤4:绘制箱线图
# 设置绘图风格 sns.set_style("whitegrid") # 创建画布并绘制箱线图 plt.figure(figsize=(8, 6)) sns.boxplot( x='Levels', # x轴为Level层级 y='Distance', # y轴为距离数据 hue='Group', # 用Group区分Adult和Baby data=df_long, palette='Set2' # 自定义配色,可替换成其他配色如'viridis' ) # 添加图表标签和标题 plt.title('Distance Distribution by Level and Group', fontsize=14) plt.xlabel('Level', fontsize=12) plt.ylabel('Distance', fontsize=12) # 调整图例位置并显示图表 plt.legend(title='Group') plt.show()
关键说明
- 转换长格式是实现同Level下双变量对比的核心,否则无法在同一分组下展示两个类别的箱线图。
- 你可以通过修改
figsize、palette、fontsize等参数调整图表样式,比如把palette换成'tab10'或者自定义颜色列表。 - 如果偏好Matplotlib原生绘制,也可以手动循环Level和Group来绘制,但Seaborn的实现更简洁高效。
内容的提问来源于stack exchange,提问作者s eadie 03
相关产品推荐
相关产品推荐

