按ggplot2中的两列分组


90

是否可以按两列分组?那么叉积是由geom_point()和绘制的geom_smooth()

例如:

frame <- data.frame(
 series <- rep(c('a', 'b'), 6), 
 sample <- rep(c('glass','water', 'metal'), 4), 
 data <- c(1:12))

ggplot(frame, aes()) # ...

这样的点612共享一个组,但不能与3

Answers:


32

为什么不只将paste这两列放在一起,然后将该变量用作组?

frame$grp <- paste(frame[,1],frame[,2])

一种更正式的方法是使用函数interaction


27
我认为您不应data.frame出于情节目的修改您的内容。本plot应绘制你的DF而不是相反。
ClementWalter '16

3
我同意,Blue Magister的答案更好。
杰斯顿(Jeston)'17

6
@clemlaflemme我认为BlueMagister的答案很好,尽管我认为这种情况下的区别很小。但是,如果您选择使用ggplot2,那么通常就不应该修改图表的数据框架这一观点很奇怪,它的整个设计都基于显式构造数据以使其与ggplot的语义兼容。
joran

缺点paste是,当输入是一个因素时,它将丢弃级别,并interaction保留原始因素的顺序。这意味着使用interaction方法更自然地将组排序。
哥打森

168

这个问题为例,interaction用于将两列合并为一个新因子:

# Data frame with two continuous variables and two factors 
set.seed(0)
x <- rep(1:10, 4)
y <- c(rep(1:10, 2)+rnorm(20)/5, rep(6:15, 2) + rnorm(20)/5)
treatment <- gl(2, 20, 40, labels=letters[1:2])
replicate <- gl(2, 10, 40)
d <- data.frame(x=x, y=y, treatment=treatment, replicate=replicate)

ggplot(d, aes(x=x, y=y, colour=treatment, shape = replicate,
  group=interaction(treatment, replicate))) + 
  geom_point() + geom_line()

ggplot示例


这对我ggplot(df) + geom_violin(aes(class1, metric.var, group = interaction(class1, class2)), position = position_dodge(width=.5))
有用

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.