求助:修正ggplot生成的双重分组并列箱线图显示异常问题
问题修正方案
1. 解决单个机场仅显示一种Direction箱线图的问题
核心原因是ggplot未正确识别ORIGIN与Direction的组合分组逻辑。需在aes()中添加group = interaction(ORIGIN, Direction),明确指定按两个变量的交互项分组绘制箱线图。
同时建议先验证数据分布:用table(sba_connections_boxplot$ORIGIN, sba_connections_boxplot$Direction)检查每个机场是否确实存在两种Direction类型的数据,若某机场仅对应一种Direction,自然只能生成单个箱线图。
2. 解决箱线图纵向压缩的问题
当前使用ylim(-100, 500)会直接删除超出范围的行数据,导致箱线图的统计计算(中位数、四分位数等)失真,引发形态压缩。应替换为coord_cartesian(ylim = c(0, 500))——该函数仅缩放绘图视图,不会删除数据,能完整保留箱线图的形态。另外航班时长不可能为负数,将下限设为0更符合实际逻辑。
修正后的完整代码
ggplot(sba_connections_boxplot, aes(x = ORIGIN, y = ACTUAL_ELAPSED_TIME, fill = Direction, group = interaction(ORIGIN, Direction))) + # 添加组合分组项 geom_boxplot(staplewidth = 0.5) + theme_minimal(base_size = 12) + ggtitle( "Distribution of Flight Durations for SBA Flights", subtitle = "Grouped by airport and direction" )+ theme( axis.text.x = element_text(angle = 45, hjust = 1) # 优化x轴标签对齐 )+ coord_cartesian(ylim = c(0, 500)) + # 替换ylim避免数据丢失 labs(x = "Airport", y = "Flight Duration (minutes)")
内容的提问来源于stack exchange,提问作者Slay
相关产品推荐
相关产品推荐

