如何仅在hh:mm中使用ggplot多面包装与x轴刻度配合使用(无日期)

时间:2019-06-01 07:50:27

标签: r ggplot2 facet-wrap

我正在努力获取包含2件东西的ggplot图表:

  • 将数据分成每个日期的分面换行
  • 仅相对于小时和分钟(HH:MM)保持x轴刻度,并保持每个构面环绕图之间的x轴刻度彼此相同的宽度。 (即10:00在每个构面图上的相同位置)
  • 这些图表的时间段少于24小时,仅覆盖上午9点至下午4点

为了使x轴上的标签清晰易读,我尝试进行的所有操作都会使连续的“时间”变量在其中具有巨大的空隙,这似乎是因为日期也被包含在幕后。

这是我当前的代码,可以完美生成我需要的小平面包装,但x轴无法读取。

ggplot(mydata2, aes(x=time, y=pending, color=server, group=date)) +
  geom_point() +
  facet_wrap(~ date)
> class(mydata2$time)
[1] "character"

我尝试了hms库。但是ggplot似乎不知道该怎么做。

mydata2$time2 <- lubridate::hms(mydata2$time)

mydata2$time2
   [1] "14H 5M 23S"  "14H 5M 23S"  "14H 5M 42S"  "14H 5M 42S"  "14H 6M 24S"  "14H 6M 24S" 
   [7] "14H 6M 42S"  "14H 6M 42S" .... etc.

但是尝试绘制图表失败,下面只是生成一个空白图表...

ggplot(mydata2, aes(x=time2, y=pending, color=server, group=tradedate)) +
  geom_point() +
  facet_wrap(~ tradedate)

Warning messages:
1: Removed 7390 rows containing missing values (geom_point). 

我如何实现上面列出的两个目标?

1 个答案:

答案 0 :(得分:0)

我无法重现该问题。可以看看是否有帮助?否则,请以代码形式发布数据样本。

set.seed(1234)
df <-
  tibble(
    timestamp = seq(
      ymd_hms("2019-01-01 00:00:00"), 
      ymd_hms("2019-01-04 00:00:00"), by = "1000 sec"
    ),
    tradedate = as.Date(timestamp),
    hms = hms::hms(as.numeric(timestamp - floor_date(timestamp, "1 day"), unit="secs"))
  ) %>% 
  mutate(
    pending = sample(11:20, size = n(), replace = TRUE)
  ) 


ggplot(df, aes(x = hms, y = pending, color = factor(tradedate))) +
  geom_point() +
  facet_grid(tradedate~.)

enter image description here