【问题标题】:adding vertical line to ggplot bar plot向ggplot条形图添加垂直线
【发布时间】:2016-06-17 14:40:56
【问题描述】:

我正在尝试将垂直线添加到显示每月计数数据的ggplot。我的 x 轴是月份,但我的垂直线代表儒略日。

例如,使用这些数据:

dat <- structure(list(Month = structure(1:12, .Label = c("Jan", "Feb", 
"Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", 
"Dec"), class = c("ordered", "factor")), Data = c(1, 1, 2, 2, 
6, 11, 19, 23, 19, 13, 5, 1)), .Names = c("Month", "Data"), class = "data.frame", row.names = c(NA, 
-12L))

我可以制作以下条形图

ggplot(dat)+ geom_bar(aes(x=  Month, y = Data), stat="identity")

然后如何使用 geom_vline 在 Julian 第 68 天和第 252 天的 x 截距上添加两条垂直线?

我不确定如何在每月(因子)x 轴数据上绘制引用连续刻度的线。

【问题讨论】:

  • 第 68 天和第 252 天是哪几天?
  • 是的,我的意思是,如果你说第 68 天是 3 月,那会很方便!
  • 哦,是的。抱歉没有更具体。感谢您的回答!

标签: r ggplot2


【解决方案1】:

当您的x 轴是factor 时,geom_vline 将使用每个值的出现顺序作为其截距。

然后,您只需确定与您要查找的确切日期相对应的分数。在此示例中,我使用了两个说明性分数。

ggplot(dat)+ geom_bar(aes(x=  Month, y = Data), stat="identity") + 
geom_vline(xintercept = 5.2) +
  geom_vline(xintercept = 8.7) 

【讨论】:

  • 我能否要求详细说明,因为我需要绘制的日期将来可能会发生变化。
  • 我不认为 5.2 和 9.2 对应于给定的年份。
  • @Spacedman 我已经在答案中解释了这些是说明性的分数。我看到你提供了一种计算线条精确位置的简单方法,干得好!
【解决方案2】:

数据是以每月一个单位绘制的,因此您需要将线添加为以月为单位的一年的一部分,并为条形大小添加一些偏移量:

ggplot(dat) +
  geom_bar(aes(x = Month, y = Data), stat = "identity") + 
  geom_vline(xintercept = 12 * (c(68, 252) / 365) + 0.5) 

通过查看第 1 天和第 365 天的行来检查:

ggplot(dat) +
  geom_bar(aes(x = Month, y = Data), stat = "identity") + 
  geom_vline(xintercept = 12 * (c(1, 365) / 365) + 0.5) 

每隔一天将在图表上进行线性插值。

【讨论】: