在刻面时重复多个绘图的值

时间:2013-07-23 14:49:42

标签: r ggplot2 facet

我有一个看起来像这样的data.frame:

> foo
        class      type    (0,10]    (10,20]    (20,30]    (30,40]
    1       A      <NA>       0.6        0.2        0.1        0.1
    2       B      <NA>       0.7        0.1        0.1        0.1
    3       C         1       0.5        0.4        0.1        0.0
    4       C         2       0.5        0.3        0.1        0.1
    5       D         1       0.7        0.3        0.0        0.0
    6       D         2       0.7        0.2        0.0        0.1
    7       E         1       0.4        0.3        0.2        0.1
    8       E         2       0.5        0.3        0.1        0.1

我在课堂和课堂上融化输入并做一个条形图:

ggplot(melt(foo, id=c("class", "type")), aes(x=variable, y=value, fill=class)) +
  geom_bar(position="dodge") +
  facet_grid(type ~.)

enter image description here

事实上,facet_grid()创建了3个图表,但我想要的是,以某种方式“忽略”A类和A类。 B是类型并在类型1和类型2的构面中显示它们,并且只获得2个图形(事实上,A和B值应该重复):

enter image description here

我尽量避免手动修改并使用类型1和2复制A和B,因为我需要原始data.frame,而不是其他图形/测试。

(对不起列的随机顺序,我在家里使用的版本比工作中的版本不同,不知道为什么会发生这种情况)

1 个答案:

答案 0 :(得分:1)

由于ggplot的理念,您将不得不进行数据复制:图中的每个项目都代表一个数据点。因此,如果您希望将NA数据放在两个方面,则需要为每个原始数据项创建两个数据点。

如果您想避免仅为绘图显式创建临时数据,可以创建一个为您执行数据复制的函数。以下内容:

distribute.na.type <- function(dat) {
  rbind(
    transform(subset(dat, type %in% c(1, NA)), type=1),
    transform(subset(dat, type %in% c(2, NA)), type=2)
  )
}

以上示例未经测试且不是非常通用,但运气稍微好一点就可以了。像这样使用它:distribute.na.type(melt(...))