ggplot2中用于连续变量的面层图

11

可能是重复问题:
ggplot - 按函数输出分面

ggplot2facets 选项非常适合按因素显示多个图,但我在学习如何有效地将连续变量转换为因素时遇到了麻烦。比如下面的数据:

DF <- data.frame(WindDir=sample(0:180, 20, replace=T), 
                 WindSpeed=sample(1:40, 20, replace=T), 
                 Force=sample(1:40, 20, replace=T))
qplot(WindSpeed, Force, data=DF, facets=~cut(WindDir, seq(0,180,30)))

我遇到了一个错误:至少有一层必须包含所有用于分面的变量
我想通过离散的30度间隔来检查力~风速之间的关系,但是似乎facet需要将因子附加到正在使用的数据框中(显然我可以使用DF$DiscreteWindDir <- cut(...),但这似乎是不必要的)。是否有一种方法可以在将连续变量转换为因子的同时使用facets

2
为什么不首先进行转换,即 DF $ WindDirBin = cut(DF $ WindDir,seq(0,180,30)),然后 facets =〜WindDirBin呢? - David Robinson
我在我的问题中提到了我可以这样做。我更喜欢另一种解决方案,因为(a)我正在使用的数据框已经有28列,我不希望添加更多不包含附加信息的列,(b)在该数据框中有几个变量需要进行此操作,因此最好在特定情况下使用cut,例如使用by(DF [,c('WindSpeed','Force')],cut(DF $ WindDir,seq(0,180,30)),plot) - Señor O
谢谢你找到了那个。虽然那不是我想要的答案,但我认为它足以回答问题了。transform似乎是最好的选择。 - Señor O
1个回答

9
制作一个示例,展示如何使用transform进行内联变换:
qplot(WindSpeed, Force,
      data = transform(DF,
                       fct = cut(WindDir, seq(0,180,3))),
      facets=~fct)

你不会用分面变量“污染”数据,但它在数据框中供ggplot进行分面(而不是作为分面规范中列的函数)。
这在扩展语法中同样适用:
ggplot(transform(DF,
                 fct = cut(WindDir, seq(0,180,3))),
       aes(WindSpeed, Force)) +
  geom_point() +
  facet_wrap(~fct)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接