2010-03-15 39 views
4

我有幾個關於GGPLOT2磨製問題...安排非小柱facet_grid(和使用非小列標籤)

比方說,我有一個返回,看起來像這樣的數據的查詢:

(請注意,它是由等級遞增,報警ASC和兩個報警下令,因爲他們的總訪問量= 1798第4周,並且排名是根據總第4周設置有3等級)

Rank Week      Alarm Total 
     1 1  BELTWEIGHER HIGH HIGH 1000 
     1 2  BELTWEIGHER HIGH HIGH 1050 
     1 3  BELTWEIGHER HIGH HIGH 900 
     1 4  BELTWEIGHER HIGH HIGH 1800 
     2 1    MICROWAVE LHS 200 
     2 2    MICROWAVE LHS 1200 
     2 3    MICROWAVE LHS 400 
     2 4    MICROWAVE LHS 1799 
     3 1 HI PRESS FILTER 2 CLOG SW 1250 
     3 2 HI PRESS FILTER 2 CLOG SW 1640 
     3 3 HI PRESS FILTER 2 CLOG SW 1000 
     3 4 HI PRESS FILTER 2 CLOG SW 1798 
     3 1 LOW PRESS FILTER 2 CLOG SW 800 
     3 2 LOW PRESS FILTER 2 CLOG SW 1200 
     3 3 LOW PRESS FILTER 2 CLOG SW 800 
     3 4 LOW PRESS FILTER 2 CLOG SW 1798 

(下面的複製代碼)

Rank = c(rep(1,4),rep(2,4),rep(3,8)) 
Week = c(rep(1:4,4)) 
Total = c( 1000,1050,900,1800, 
     200,1200,400,1799, 
     1250,1640,1000,1798, 
     800,1200,800,1798) 
Alarm = c(rep("BELTWEIGHER HIGH HIGH",4), 
     rep("MICROWAVE LHS",4), 
     rep("HI PRESS FILTER 2 CLOG SW",4), 
     rep("LOW PRESS FILTER 2 CLOG SW",4)) 
spark <- data.frame(Rank, Week, Alarm, Total) 

現在,當我做到這一點...

s <- ggplot(spark, aes(Week, Total)) +   
    opts( 
     panel.background = theme_rect(size = 1, colour = "lightgray"), 
     panel.grid.major = theme_blank(), 
     panel.grid.minor = theme_blank(), 
     axis.line = theme_blank(), 
     axis.text.x = theme_blank(), 
     axis.text.y = theme_blank(), 
     axis.title.x = theme_blank(), 
     axis.title.y = theme_blank(), 
     axis.ticks = theme_blank(), 
     strip.background = theme_blank(), 
     strip.text.y = theme_text(size = 7, colour = "red", angle = 0) 
    ) 

s + facet_grid(Alarm ~ .) + geom_line() 

我得到這個....

alt text http://img101.imageshack.us/img101/9103/ss20100315112108.png

注意,它根據報警和刻面按字母順序排列刻面。

兩個問題:

  1. 我如何能我把它通過報警刻面,但正確的順序顯示? (Rank asc,Alarm asc)。

alt text http://img17.imageshack.us/img17/6986/ss20100315113243.png

  • 另外,我怎麼能保持它的報警,但顯示的標籤刻面從排名,而不是報警?
  • alt text http://img85.imageshack.us/img85/470/ss20100315113529.png

    請注意,我不能僅僅面的排名,因爲GGPLOT2只能看到3面積那裏有真正的4個不同的報警。

    +0

    對於第二個問題,爲什麼不喜歡: 單曲+ facet_wrap(〜排名+報警,NcoI位= 1)+ geom_line()',或單曲+ facet_grid(報警〜。 )+ geom_line(aes(color = factor(Rank)))'。 – xiechao 2010-03-15 04:39:42

    回答

    6

    要回答你的第一個問題:你可以簡單地重新排序因子水平,使他們不再按字母順序排列,就像這樣:

    spark$Alarm<-factor(spark$Alarm, levels(spark$Alarm)[c(1,4,2,3)]) 
    

    對於第二個問題,你可以寫你自己的貼標機功能,使聯想報警和行列,像

    lbl.fn <- function(variable, value) { paste(spark$Rank[which(as.character(spark$Alarm)==as.character(value))],as.character(value)) } 
    s + facet_grid(Alarm ~ ., labeller="lbl.fn") + geom_line()