首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按非facet列排列facet_grid (使用非facet列的标签)

按非facet列排列facet_grid (使用非facet列的标签)
EN

Stack Overflow用户
提问于 2010-03-15 03:45:42
回答 1查看 3.7K关注 0票数 4

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

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

(请注意,这是由等级asc,警报asc和两个警报器的等级为3,因为他们的总数= 1798的第4周,而排名是根据总计第4周)

代码语言:javascript
复制
   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

(重复代码如下)

代码语言:javascript
复制
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) 

现在当我这么做的时候..。

代码语言:javascript
复制
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文本http://img101.imageshack.us/img101/9103/ss20100315112108.png

请注意,它是根据警报的面和面按字母顺序排列的。

两个问题:

  1. 我怎样才能让它以正确的顺序显示出来呢?(等级asc,警报asc)。

alt文本http://img17.imageshack.us/img17/6986/ss20100315113243.png

  1. 此外,我如何保持它表面的警报,但显示标签从等级,而不是警报?

alt文本http://img85.imageshack.us/img85/470/ss20100315113529.png

请注意,我不能只是在等级方面,因为ggplot2将只看到3个方面的绘图,其中真正有4个不同的警报。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-03-15 04:17:14

要回答您的第一个问题:您可以简单地重新排序因子级别,使它们不再按字母顺序排列,如下所示:

代码语言:javascript
复制
spark$Alarm<-factor(spark$Alarm, levels(spark$Alarm)[c(1,4,2,3)])

对于第二个问题,您可以编写自己的标签函数,这样就可以将警报和等级联系起来,比如

代码语言:javascript
复制
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()
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2444973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档