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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 08:30:08