2013-03-14 62 views
2

dput(X)在GGPLOT2

structure(list(Host = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L), .Label = "A", class = "factor"), TimeStamp = structure(c(1L, 
2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L), .Label = c("1/11/2013", 
"1/12/2013", "1/13/2013", "1/14/2013", "1/15/2013"), class = "factor"), 
    Instance = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 
    2L), .Label = c("/application", "/db"), class = "factor"), 
    Free_Space = c(5048L, 5049L, 6000L, 4800L, 5100L, 317659L, 
    340000L, 350000L, 356666L, 370000L), Used_Space = c(3017L, 
    56000L, 60000L, 55000L, 54000L, 271657L, 150000L, 175000L, 
    165000L, 189999L), Total_Space = c(8064L, 61049L, 66000L, 
    59800L, 59100L, 589316L, 490000L, 525000L, 521666L, 559999L 
    )), .Names = c("Host", "TimeStamp", "Instance", "Free_Space", 
"Used_Space", "Total_Space"), class = "data.frame", row.names = c(NA, 
-10L)) 

我有这个数据帧做geom_hline时选择最新数据集。我通过在给定Host,TimeStamp和Instance的情况下使用data.table包添加Free_Space和Used_Space来驱动列名Total_Space。

x<-data.table(x) 
x<-x[,Total_Space:=Free_Space+Used_Space, by=c("Host", "Instance", "TimeStamp")] 

我喜欢用ggplot facet_wrap从GGPLOT2到图形在GB用空间和由TOTAL_SPACE绘制geom_line,使用户可以看到有多少头部空间也有。

例如,我这样做:

ggplot(x, aes(TimeStamp, Used_Space/1024, group=Instance)) + geom_area(fill="blue") + geom_smooth(method="lm", colour="orange",se=T, size=1) + geom_hline(data=x, aes(yintercept = Total_Space/1024), col="red")+ facet_wrap(~Host+Instance, ncol=3, scales="free") 

我看到的问题是,我得到了同样instnace和主机的多个geom_hline,由于TOTAL_SPACE正在发生变化。

我的问题是,如何为每个实例和主机执行geom_hline时选择最新的时间戳?我需要在geom_hline中显示最新的Total_Space。

我尝试这样的方法:

X < -x [,LatestTS:=尾部(P [顺序(第$时间戳),],1)$ TOTAL_SPACE,通过= C( “主机”,“实例“,”TimeStamp“)]

没有工作。它会为所有实例选择相同的编号。

回答

2

我的解决办法是,首先,让你的列TimeStamp到日期

x$TimeStamp<-as.Date(x$TimeStamp,format="%m/%d/%Y") 

然后,当你的数据对象是data.table,你可以根据HostInstance数据子集,并设置TimeStamp应该是最大值。

x[,.SD[TimeStamp==max(TimeStamp)],by="Host,Instance"] 
    Host  Instance TimeStamp Free_Space Used_Space Total_Space 
1: A /application 2013-01-15  5100  54000  59100 
2: A   /db 2013-01-15  370000  189999  559999 

现在你可以使用这条线内geom_hline()。有了scale_x_date(),您现在可以获得更多控制此比例的可能性。

library(scales) 
ggplot(x, aes(TimeStamp, Used_Space/1024, group=Instance)) + 
    geom_area(fill="blue") + geom_smooth(method="lm", colour="orange",se=T, size=1) + 
    geom_hline(data=x[,.SD[TimeStamp==max(TimeStamp)],by="Host,Instance"], aes(yintercept = Total_Space/1024), col="red")+ 
    facet_wrap(~Host+Instance, ncol=3, scales="free") + 
    scale_x_date(labels = date_format("%m/%d/%Y")) 

enter image description here

+0

谢谢你的工作。 – user1471980 2013-03-14 19:26:11