2012-09-26 40 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)