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

R ggplot绘制折线图出现异常竖线问题排查

解决ggplot折线图出现异常竖线的问题

问题原因分析

  1. 字段名不匹配:主数据集用Day字段做分面,但coldcounter用的是Day of Week,导致分面时coldcounter的所有日期数据被强行渲染到每个分面中。
  2. 分组逻辑错误:geom_line里的group=1会把所有分面的时段点跨日期连接,不同日期的同时段点被连起来就出现了竖线。
  3. 数值范围不匹配:员工数(emp)的数值远小于销售百分比(percent),折线会被压缩到图表底部,视觉效果极差。

分步解决方案

1. 统一数据集的日期字段名

修改coldcounter的汇总代码,把Day of Week重命名为Day,和主数据集字段名保持一致:

coldcounter <- schedules %>% 
  group_by(`Day of Week`, Time) %>% 
  summarize(emp = sum(`# of Employees`)/4) %>%
  rename(Day = `Day of Week`)  # 重命名字段,匹配主数据集

2. 修正折线图的分组逻辑

在geom_line中按Day分组,确保每个分面只连接当天的时段数据,同时禁用继承主图层的美学映射,避免冲突:

geom_line(data=coldcounter, aes(x=Time, y=emp, group=Day), inherit.aes = FALSE)

3. 添加双y轴优化视觉效果(可选但推荐)

因为员工数和销售百分比的数值范围差异极大,添加第二个y轴适配员工数的刻度,让折线清晰展示:

kitchen %>%
  group_by(Day, Time) %>% 
  summarise(Sales = sum(Sales)) %>%
  mutate(percent = Sales/sum(Sales)*100) %>% 
  ggplot()+  
  geom_bar(aes(x=Time,y=percent,fill=ifelse(percent<1,"Red","Blue")),stat="identity")+ 
  theme(axis.text.x = element_text(angle =90))+
  facet_wrap(~Day)+
  ggtitle("Cold Counter Sales Overview - 11PM Close")+ 
  ylab("% of Daily Sales")+ 
  theme(strip.background = element_rect(fill = "lightblue"))+
  scale_fill_manual(values = c("darkslategray3","red"))+
  labs(fill="Less than or \nGreater than 1%")+ 
  # 修正后的折线图层
  geom_line(data=coldcounter, aes(x=Time, y=emp*20, group=Day), color="black", inherit.aes = FALSE)+
  # 配置第二个y轴,对应员工数的实际值
  scale_y_continuous(
    sec.axis = sec_axis(~./20, name = "Average # of Employees")
  )+
  scale_x_discrete(limits = c("6:30 AM","7:00 AM","11:00 PM"))  # 补全你的完整时段列表

注:emp*20是缩放因子,可根据你的实际员工数范围调整,确保折线在图表中显示位置合理。


修改后效果说明

  • 统一字段名后,分面逻辑会正确匹配每个日期的员工数数据,每个分面只显示当天的时段点。
  • 按Day分组后,折线仅连接同一日期内的时段点,不会跨日期产生异常竖线。
  • 双y轴解决了数值范围差异导致的折线不可见问题,让销售占比和员工数两个指标都清晰展示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 07:27:41