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

geom_boxplot绘制箱线图时自定义垂直竖线不显示问题求助

问题原因

你遇到的竖线不显示问题有两个核心原因:

  1. 你的X轴是通过reorder(format(dat$date,'%b %y'),dat$date)生成的离散分类变量,X轴的坐标本质是从1开始的整数(每一个整数对应一个年月分组),不是连续的日期数值。你传入as.numeric(as.Date("2013-08-23"))得到的是日期对应的时间戳数值,远远超出X轴的坐标范围,自然无法显示。
  2. 你提供的示例数据日期全部为2020年12月,2013-08-23对应的年月不在数据覆盖范围内,即便X轴是连续日期类型,竖线也会落在绘图区域外无法显示,需要确认你的实际数据集是否包含2013年8月对应的年月分组。

解决方案

方案1:保留离散年月X轴

先自动计算2013年8月对应的分组位置,再传入geom_vline即可,代码如下:

library(ggplot2)
# 生成排序后的所有年月标签
month_labels <- unique(format(dat$date,'%b %y'))[order(unique(dat$date))]
# 匹配2013年8月对应的分组位置,没有匹配结果则说明数据不含该时间段
vline_pos <- which(month_labels == format(as.Date("2013-08-23"), "%b %y"))

ggplot(dat) +
  geom_boxplot(aes(y = daily_count,
                   # aes内不需要加dat$前缀,ggplot会自动从数据集取列
                   x = reorder(format(date,'%b %y'), date),
                   fill = category)) +
  xlab('Month & Year') + 
  ylab('Count') + 
  guides(fill = guide_legend(title = "Category")) +
  theme_bw() +
  theme(axis.text = element_text(size = 10),
        axis.title = element_text(size = 10)) +
  geom_vline(xintercept = vline_pos, linetype = 1, colour = "red")

方案2:改用连续日期X轴

如果需要更灵活的日期操作,可以把X轴设为连续日期类型,直接传入目标日期即可,还可以手动扩展X轴范围包含2013年的时间段:

library(ggplot2)

ggplot(dat) +
  geom_boxplot(aes(y = daily_count,
                   x = date,
                   group = cut(date, "month"),
                   fill = category)) +
  # 设置X轴标签为年月格式,同时扩展范围包含2013年
  scale_x_date(date_labels = "%b %y", 
               name = "Month & Year",
               limits = c(as.Date("2013-01-01"), max(dat$date))) +
  ylab('Count') + 
  guides(fill = guide_legend(title = "Category")) +
  theme_bw() +
  theme(axis.text = element_text(size = 10),
        axis.title = element_text(size = 10)) +
  # 直接传入日期即可
  geom_vline(xintercept = as.Date("2013-08-23"), linetype = 1, colour = "red")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:54:01