r - 按非构面列排列 facet_grid(和使用非构面列的标签)

标签 r ggplot2 facet

我有几个关于 ggplot2 分面的问题...

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

(请注意,它是按 Rank asc 排序的,Alarm asc 和两个 Alarms 的 Rank 为 3,因为它们第 4 周的 Totals = 1798,而 Rank 是根据第 4 周的 Totals 设置的)

   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

请注意,它是根据 Alarm 分面的,并且分面是按字母顺序排列的。

两个问题:
  • 我怎样才能让它按警报分面但以正确的顺序显示? (排名升序,警报升序)。

  • alt text http://img17.imageshack.us/img17/6986/ss20100315113243.png
  • 另外,我怎样才能让它保持在警报的方面,但显示来自等级而不是警报的标签?

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

    请注意,我不能只对 Rank 进行方面,因为 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()
    

    关于r - 按非构面列排列 facet_grid(和使用非构面列的标签),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2444973/

    相关文章:

    eclipse - Java EE 6 的 Maven 与 Eclipse 项目 Facets

    R reshape dcast 0 和 1

    r - 长时间使用 mongo.find.all (rmongodb) 导入数据

    r - 循环未完成保存 pdf

    r - ggplot 扩展图例颜色条

    r - 重叠并固定小平面中的 x 尺度(尺度 =“free” )以制作电影

    r - ggplot2:添加回归方程和 R2 并调整它们在绘图上的位置

    r - 使用 R 中的应用系列并行化用户定义的函数

    r - 如何访问列表中所有数据框的同一列

    r - 向 ggplot 中堆叠的 geom_col 添加唯一标签