如何在未分面的R ggplot箱图中删除未使用的因子?

时间:2013-01-23 21:23:36

标签: r ggplot2

下面是我用来制作一些箱图的一些示例代码:

stest <- read.table(text="    site  year    conc
    south   2001    5.3
    south   2001    4.67
    south   2001    4.98
    south   2002    5.76
    south   2002    5.93
    north   2001    4.64
    north   2001    6.32
    north   2003    11.5
    north   2003    6.3
    north   2004    9.6
    north   2004    56.11
    north   2004    63.55
    north   2004    61.35
    north   2005    67.11
    north   2006    39.17
    north   2006    43.51
    north   2006    76.21
    north   2006    158.89
    north   2006    122.27
", header=TRUE)

require(ggplot2)
ggplot(stest, aes(x=year, y=conc)) +
  geom_boxplot(horizontal=TRUE) +
  facet_wrap(~site, ncol=1) +
  coord_flip() +
  scale_y_log10()

结果如下:

boxplot

我尝试了所有我能想到的但不能制作一个情节,其中南方面仅包含显示数据的年份(2001年和2002年)。我正在尝试做什么?

这是屏幕截图的link(DEAD),显示了我想要实现的目标:

2 个答案:

答案 0 :(得分:3)

使用scales='free.x'参数facet_wrap。但我怀疑你需要做的不仅仅是为了获得你正在寻找的情节。

在您最初的aes(x=factor(year), y=conc)来电中专门ggplot

答案 1 :(得分:0)

一种避免问题的简单方法(结果相当不错):
分别生成两个箱图,然后使用grid.arrange包的gridExtra命令将它们连接在一起。

library(gridExtra)

p1 <- ggplot(subset(stest,site=="north"), aes(x=factor(year), y=conc)) +
 geom_boxplot(horizontal=TRUE) + coord_flip() + scale_y_log10(name="")

p2 <- ggplot(subset(stest,site=="south"), aes(x=factor(year), y=conc)) +
 geom_boxplot(horizontal=TRUE) + coord_flip() + 
 scale_y_log10(name="X Title",breaks=seq(4,6,by=.5)) +

grid.arrange(p1, p2, ncol=1)