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

R语言ggplot中同名列(双B列)的并排箱线图绘制方法

解决ggplot中重复列名的箱线图并排显示问题

问题核心

数据框存在两列同名的'B',需要在x轴同一'B'位置并排展示这两列的箱线图,而原始代码会因R自动重命名重复列名,导致x轴出现两个独立的'B'标签。

解决方案步骤

1. 修正重复列名

R的data.frame不允许重复列名,创建时会自动将第二个'B'重命名为'B.1',因此先手动给两列设置唯一名称(如'B1'、'B2'),后续再统一x轴标签:

df_temp <- data.frame(
  A = c(0.206, 0.192, 0.187, 0.213, 0.167, 0.209, 0.213, 0.155, 0.190, 0.192),
  B1 = c(0.260, 0.210, 0.215, 0.280, 0.271, 0.230, 0.232, 0.238, 0.220, 0.278),
  B2 = c(0.185, 0.276, 0.233, 0.225, 0.239, 0.242, 0.231, 0.195, 0.198, 0.200),
  C = c(0.204, 0.246, 0.212, 0.252, 0.209, 0.244, 0.206, 0.212, 0.210, 0.276),
  D = c(0.218, 0.201, 0.230, 0.189, 0.241, 0.193, 0.225, 0.198, 0.239, 0.199),
  E  = c(0.275, 0.268, 0.257, 0.273, 0.258, 0.262, 0.210, 0.274, 0.285, 0.306),
  F  = c(0.234, 0.239, 0.213, 0.233, 0.250, 0.217, 0.253, 0.217, 0.277, 0.221))

2. 转换为长格式并统一x轴标签

使用tidyr和dplyr将宽格式数据转为长格式,同时创建用于x轴显示的标签列,把'B1'和'B2'统一标记为'B':

library(tidyr)
library(dplyr)

df_long <- df_temp %>%
  pivot_longer(cols = everything(), names_to = "variable", values_to = "value") %>%
  mutate(x_label = case_when(
    variable %in% c("B1", "B2") ~ "B",
    TRUE ~ variable
  ))

3. 绘制并排箱线图

通过group = variable区分两个'B'列,使用position_dodge实现同一x位置的箱线图并排:

library(ggplot2)

ggplot(data = df_long, aes(x = x_label, y = value, group = variable)) +
  geom_boxplot(width = 0.4, position = position_dodge(width = 0.5), outliers = FALSE) +
  ylab("Value") +
  theme_minimal() +
  theme(
    text = element_text(size = 14),
    axis.text.x = element_text(size = 12, angle = 90, hjust = 1),
    axis.text.y = element_text(size = 12),
    plot.title = element_text(hjust = 0.5)
  ) +
  coord_cartesian(ylim = c(0.17, 0.45))

关键说明

  • group = variable:确保两个'B'列被识别为独立分组,生成两个箱线图。
  • position_dodge(width = 0.5):调整箱线图的横向间距,避免重叠,同时保持在同一x轴标签下。
  • x_label列:让x轴在对应位置仅显示一个'B'标签,满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 16:48:17