2012-09-26 42 views
0

我的数据集看起来LIK这样的:ggplot facet_wrap图

X

date server cpu 
1/1/2012 A 80 
1/1/2012 B 20 
1/1/2012 C 10 
1/2/2012 A 80 
1/2/2012 B 20 
1/2/2012 C 10 
1/3/2012 A 80 
1/3/2012 B 20 
1/3/2012 C 10 
1/4/2012 A 80 
1/4/2012 B 20 
1/4/2012 C 10 
1/5/2012 A 80 
1/5/2012 B 20 
1/5/2012 C 10 
1/6/2012 A 80 
1/6/2012 B 20 
1/6/2012 C 10 

我喜欢创造,使用ggplot facet_wrap每个服务器一个单独的图形(除非有更好的方法来做到这一点?)

我的代码是这样的:

ggplot(x, aes(date, cpu, group=server, colour=server)) 
+ geom_point() 
+ facet_wrap(~server) 
+ ylim(0,100) 
+ theme_bw() 
+ geom_smooth(method="lm", se=TRUE, size=1) 
+ xlab("Date") 
+ ylab("CPU") 
+ opts(title="% CPU"),plot.title=theme_text(size=14, colour="navyblue"),axis.title.x = theme_text(face="bold", size=12, colour="#990000"), axis.text.x = theme_text(angle=90, size=9, face="bold"),axis.title.y = theme_text(face="bold", size=12, colour="#990000", angle=90), axis.text.y=theme_text(size=9, face="bold", hjust=1)) + opts(legend.position = "none") 
+ opts(strip.text.x = theme_text(size=10, face="bold", colour="navyblue"), strip.background = theme_rect(colour="blue", fill="#98CAFF")) 

这有点儿工作,但我有两个问题:

  1. 如果主机数量不是均匀对齐的,这意味着有时最后一行的网格可能比以前的行少,因为主机数量可能是奇数。所以,最后一行网格图有日期,但最后一行之前没有日期。如何确保最后一行之前的行有日期?
  2. 由于我将为此编写脚本,因此某些数据框可能具有更多数量的服务器。根据服务器的数量,我需要调整png的大小。例如,如果服务器的数量是20,我需要图像的高度为500,宽度为200.有没有办法在ggplot2中做到这一点?你可能有这个想法。除了ggplot2之外,还有其他方法可以做到这一点吗?

回答

0

在关于问题2,您可以使用ggsave保存最后产生的情节,一些伪它立足于服务器的数量积宽度:

ggplot(...) + 
    etc() 
if(noServers > 20) plot_width = 500 
ggsave("name.png", width = plot_width)