使用以下数据:
$cat spike.csv
time,ts,count
2013-04-30 23:58:55,1367366335,32
2013-04-30 23:58:57,1367366337,664
2013-04-30 23:59:03,1367366343,4892
2013-04-30 23:59:04,1367366344,5185
2013-04-30 23:59:09,1367366349,4548
2013-04-30 23:59:10,1367366350,4154
2013-04-30 23:59:22,1367366362,1750
2013-04-30 23:59:23,1367366363,1720
2013-04-30 23:59:24,1367366364,1624
2013-04-30 23:59:32,1367366372,1152
2013-04-30 23:59:33,1367366373,1217
2013-04-30 23:59:59,1367366399,704
2013-05-01 00:00:00,1367366400,642
2013-05-01 00:00:01,1367366401,688
2013-05-01 00:00:02,1367366402,682
2013-05-01 00:00:03,1367366403,660
2013-05-01 00:00:09,1367366409,594
2013-05-01 00:00:10,1367366410,554
2013-05-01 00:02:09,1367366529,259
2013-05-01 00:02:10,1367366530,281
2013-05-01 00:02:11,1367366531,242
2013-05-01 00:02:12,1367366532,280
2013-05-01 00:02:25,1367366545,252
2013-05-01 00:02:26,1367366546,273
使用R,我为时间列创建POSIXct对象。
>spike<-read.delim("NEED/stack.csv",sep=",")
>spike$time<-as.POSIXct(spike$time, format='%Y-%m-%d %H:%M:%S')
然后我使用ggplot绘制数据:
>ggplot(spike,aes(x=time,y=count))+
geom_point(size=3)+
geom_point(size=2,color="cyan")+
geom_line()+
theme(axis.text.x = element_text(siz=10))+
xlab("Time (mins)")
我希望x轴在一分钟间隔内有特定的断点,对于小于00:00的值,我希望在分钟中看到负值。建议休息时间:-00:02,-00:01,00:00,00:01,00:002。任何建议将不胜感激。想法?
答案 0 :(得分:1)
你应该知道,你不想绘制时间而是时间差异/持续时间,这是完全不同的。
spike$timediff <- as.numeric(difftime(spike$time,
as.POSIXct("2013-05-01 00:00:00", format='%Y-%m-%d %H:%M:%S'),
units="mins"))
ggplot(spike,aes(x=timediff,y=count))+
geom_point(size=3)+
geom_point(size=2,color="cyan")+
geom_line()+
theme(axis.text.x = element_text(siz=10))+
xlab("Time (mins)")
答案 1 :(得分:0)
您可以使用以下内容构建xlab值序列:
x <- format(as.POSIXct(seq(-3600,0,60),origin="2012-12-31 0:00:00"),"%H:%M")
negx <- rev(paste0("-",x))
c(negx[1:length(negx)-1],x)
答案 2 :(得分:0)
正如其他人所提到的,您尝试将间隔或持续时间表示为日期时间。
ggplot2
不知道如何处理difftime
(也许我错了),所以我的想法是按原样绘制数据(计数与时间),并使用自定义格式化程序格式化日期时间轴。
在格式化程序中,我根据间隔的符号计算特定原点的间隔和格式时间。
## origin :a reference date
## forma :you can give here any date format
negative_date_format <- function (origin,forma = "%H:%M"){
function(x) {
x <- difftime(x,origin,units='secs')
y <- DF$time[13] + abs(x)
mapply(format,y, ifelse(sign(x) >= 0, forma ,
paste0("[",forma,"]"))) ## or paste0("-",forma) to get -00:01
}
}
ggplot(DF,aes(x=time,y=count))+
geom_point(size=3)+
geom_point(size=2,color="cyan")+
geom_line()+
theme(axis.text.x = element_text(siz=15))+
scale_x_datetime(labels = negative_date_format(origin=DF$time[13],forma = "%H:%M"))+
xlab("Time (mins)")