在R中绘制不同轴的时间和日期

时间:2014-12-06 08:07:59

标签: r plot ggplot2

我的数据看起来像

头(data1,10)

       id           time     type      value1            value2 value3
1    1612 7/1/2014 10:15 activity        none                         
2   76308 7/1/2014 10:17  battery discharging                         
3    1613 7/1/2014 10:17 activity        none                         
4    1614 7/1/2014 10:17 activity        none                         
5    1615 7/1/2014 10:17 activity        none                         
6    1616 7/1/2014 10:17 activity        none                         
7    1617 7/1/2014 10:17 activity        none                         
8  325200 7/1/2014 10:17     wifi     linksys 00:1a:70:5b:8f:21    -86
9    1618 7/1/2014 10:19 activity        none                         
10   1619 7/1/2014 10:19 activity        none                  

完整的数据可以this link格式下载,数据是csv,大小约为1.6 MB。 数据有5个重要的列(时间,类型,值1,值2,值3)。 type contains:activity表示用户活动(无,高,低),短信,wifi等。

我想将我的数据绘制成如下: enter image description here

X轴是间隔1小时的时间,Y轴是间隔1天的日期。 然后对于每种类型都有不同的颜色,如图所示。

当许多值同时显示时,情节看起来更厚,而且对于活动类型我想要不同的颜色(无,高和低)。

真的,我不知道这样做,我需要你的帮助。 谢谢,

2 个答案:

答案 0 :(得分:1)

不确定您将如何使用数据进行绘图,这里我假设您在不同日期绘制类型与时间值的关系。看看这是否是您正在寻找的:

# transforming your data
library(data.table); library(tidyr); library(ggplot2)
test = fread("data_test.csv")  # the data file is in working directory
test = separate(test, time, c("days","time"), sep=" ")
test$days = as.POSIXct(strptime(test$days, "%m/%d/%Y"))
test$time = as.POSIXct(strptime(test$time, "%H:%M"))

# to plot
ggplot(test, aes(x=time, y=type, colour=type, shape=type)) +
  theme_bw() + 
  geom_point() + 
  facet_grid(days ~.) + 
  scale_x_datetime(breaks=date_breaks("1 hour"), labels = date_format("%H:%M"))

enter image description here

答案 1 :(得分:0)

我可能给你的第一个指示是用正确的间隔准备变量并使用ggplot2(或格子)。

使用ggplot2,您必须编写如下内容:

ggplot(aes(x = time_1h, y = value, color = type, shape = type), data = yourdata) +
 geom_point() + facet_wrap(~ date_1day, ncol = 1)

根据我的理解,你想在每个日期的y轴上绘制的是,在特定时间内是否存在该模态,并且你想要将它绘制在不同的高度,以便点不重合。要做到这一点,你可以准备数据,例如,如果存在wifi,则给出1,如果存在呼叫则给出2等等......这可能是一个解决方案。等待其他可能的答案。