R带有时间戳的图中的多行

时间:2017-06-02 00:46:15

标签: r graph ggplot2

我想在一张图上有三个值。到目前为止,如果我将时间戳转换为日期,我可以有3行

MyData$Timestamp <- as.Date(MyData$Timestamp)

但我想在我的图表上也有一小时。关注我的样本数据

            Timestamp Systolic.pressure Diastolic.pressure Pulse
1 2017-06-01 23:35:31               125                 80    70
2 2017-06-02 23:35:43               130                 90    89
3 2017-06-02 23:35:43               135                 93    96
4 2017-06-03 23:35:56               140                 90    98

有没有办法转换Timestamp做日期和时间?

1 个答案:

答案 0 :(得分:1)

您可以使用lubridate将时间戳转换为日期/时间。您还需要从宽长格式转换数据框,其中一列用于变量名称,另一列用于其值。 tidyr::gather可以做到这一点。

我不会将所有变量放在一个图上,因为血压测量值与脉冲测量值的单位不同。双y轴是一种可行但不推荐的解决方案。

我也想知道,在你的例子中,是否可以同时存在不同的值?鉴于数据的性质,我认为这不太可能。

所以这是一个可能的解决方案,使用方面。我从这个图的示例数据中删除了第3行。

library(dplyr)
library(tidyr)
library(ggplot2)
library(lubridate)

MyData %>% 
  mutate(ts = ymd_hms(Timestamp)) %>% 
  # next line just drops row 3
  slice(c(1:2, 4)) %>% 
  gather(var, val, -Timestamp, -ts) %>% 
  # reorder the variables for facets
  mutate(var = factor(var, levels = c("Systolic.pressure", "Diastolic.pressure", "Pulse"))) %>% 
  ggplot(aes(ts, val)) + 
    geom_line() + 
    facet_grid(var ~ ., scales = "free") + 
    labs(x = "timestamp", y = "value") +
    theme_light()

enter image description here