关于ggplot2中的方面,我有几个问题。

假设我有一个查询,返回的数据如下所示:

(请注意,按等级升序排序,警报升序和两个警报的等级为3,因为第4周的总和= 1798,并且根据第4周的总和设置了排名)

   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

请注意,它根据“警报”进行了分面,并且分面按字母顺序排列。

两个问题:


如何使它多面显示警报,但以正确的顺序显示? (等级升序,警报升序)。


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


另外,如何使它保持“报警”状态,但显示“等级”而不是“报警”标签?


alt text http://img85.imageshack.us/img85/470/ss20100315113529.png

请注意,我不能只是对方面进行分析,因为ggplot2只能看到3个方面来绘制真正存在4个不同警报的位置。

最佳答案

回答第一个问题:您可以简单地对因子水平进行重新排序,使它们不再按字母顺序排列,如下所示:

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()

07-24 09:51
查看更多