使用ggplot2进行分组:代码生成一个没有构面的单个图形

时间:2013-10-11 17:53:51

标签: r plot ggplot2 facet

我的代码基于this example on stackoverflow。我的第一次尝试工作正常,如下所示: enter image description here

然后我尝试用三组做同样的事情。我这样分组:

df.m <- transform(df.m, facet=ifelse(df.m$variable %in% c(var11, var12), 'One',
                                 ifelse(df.m$variable %in% c(var21, var22), 'Two', 'Three')))
g <- ggplot(df.m, aes(group=facet, x=Years, y=value, colour=variable, shape=variable))
g <- g + geom_point() + facet_wrap(~facet)

使用这段代码,我最终会得到一个包含所有变量的图。没有分面发生。我认为我对ifelse做错了,但我不确定。

根据要求,这是head(df.m)

的输出
  Years variable     value facet
1  1997     var11 0.1245161     One
2  1998     var11 0.1154599     One
3  1999     var11 0.1151908     One
4  2000     var11 0.1209199     One
5  2001     var11 0.1321990     One
6  2002     var11 0.1476364     One

1 个答案:

答案 0 :(得分:3)

所以,问题是因为你错过了与%in%进行比较的向量中的引号。但是你得到错误消息的原因比这复杂一点。您的工作区中必须有名为var11var12等的对象

从干净的工作空间开始:

require(reshape2)
dat = data.frame(ID = rnorm(10), var11 = rnorm(10), 
               var12 = rnorm(10), var21 = rnorm(10), var22 = rnorm(10), 
               var13 = rnorm(10), var23 = rnorm(10)) 
df.m = melt(dat, id.vars = 1)

如果我这样做,我在运行transform时会收到一条错误消息:

dfm2 = transform(df.m, facet=ifelse(variable %in% c(var11, var12), 'One',
                                 ifelse(variable %in% c(var21, var22), 'Two', 'Three')))
Error in match(x, table, nomatch = 0L) : object 'var11' not found

现在我在工作区中创建了一些具有相同名称的矢量对象:

var11 = 1
var12 = 2
var21 = 1
var22 = 2
var13 = 1

dfm2 = transform(df.m, facet=ifelse(variable %in% c(var11, var12), 'One',
                                 ifelse(variable %in% c(var21, var22), 'Two', 'Three')))

Wah-lah,没有错误消息和facet变量的一个级别而不是三个。从本质上讲,您从未进行过任何匹配,因此最后一级(Three)被分配给所有内容。

您需要这些引号来引用字符向量而不是对象。

transform(df.m, facet=ifelse(variable %in% c("var11", "var12"), 'One',
                                 ifelse(variable %in% c("var21", "var22"), 'Two', 'Three')))
相关问题