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
相关产品推荐
相关产品推荐

