当x映射到日期或时间变量时,如何在ggplot中查找和标记峰值?

时间:2016-02-29 18:51:42

标签: r ggplot2 ggpmisc

是否可以在

中添加每个峰值时的小时的文本标签
ggplot(lynx.df, aes(time, V.lynx)) + 
  geom_line() + 
  stat_peaks(colour = "red") + 
  stat_peaks(geom = "text", colour = "red", vjust = -0.5) + 
  ylim(-100, 7300)

我在这里复制数据文件的头部:

date,o3
1/8/2015 0:00,27.4
1/8/2015 1:00,31.6
1/8/2015 2:00,36
1/8/2015 3:00,25.2
1/8/2015 4:00,22.6
1/8/2015 5:00,28.9
1/8/2015 6:00,30.6
1/8/2015 7:00,39.5
1/8/2015 8:00,40.9
1/8/2015 9:00,40.6
1/8/2015 10:00,39.1
...

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

是的,如果它在数据中,则可以添加小时。您需要提供合适的格式字符串。使用您私下发送给我的示例数据,可以使用以下代码。

library(readr)
library(dplyr)
library(lubridate)
library(ggplot2)
library(ggpmisc)

ozone.df <- read_csv("ggpmisc.csv", col_types = "cd")
ozone.df <- mutate(ozone.df, datetime = dmy_hm(date))
ggplot(ozone.df, aes(datetime, o3)) + geom_line() +
  stat_peaks(colour = "red", span = 21, ignore_threshold = 0.5) +
  stat_peaks(geom = "text", colour = "red", span = 21, ignore_threshold = 0.5,
             hjust = -0.1, x.label.fmt = "%H:%M", angle = 90) +
  ylim(0, 85)

我添加了一些其他技巧,假设您对每日峰值感兴趣(span = 21使用21个观察点的移动窗口来查找峰值)。我还假设你只对它们在观测的y范围的上半部分感兴趣。你问了几个小时,我还加了几分钟让它更具可读性。如果您希望只有几个小时,则将“%H:%M”更改为“%H”。

以下是结果图: enter image description here