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()) # ...

포인트하도록 6하고 12있지만이있는 그룹을 공유 3.

답변:


32

paste이 두 열을 함께 사용하여 해당 변수를 그룹으로 사용 하지 않는 이유는 무엇 입니까?

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

좀 더 공식적인 방법은 함수를 사용하는 것 interaction입니다.


27
data.frame줄거리를 위해 수정해서는 안된다고 생각합니다 . 는 plotdf를 플롯해야하며 그 반대가 아닙니다.
ClementWalter

3
동의합니다. Blue Magister의 답변이 더 좋습니다.
Jeston

6
@clemlaflemme BlueMagister의 대답은 괜찮다고 생각하지만이 경우의 차이는 상당히 사소하다고 생각합니다. 그러나 플롯에 대한 데이터 프레임을 수정해서는 안된다는 일반적인 입장은 ggplot2 를 사용하도록 선택했을 때 흥미로운 점입니다 . 전체 디자인은 ggplot의 의미 체계와 함께 작동하도록 데이터를 명시 적으로 구조화하는 것을 전제로합니다.
joran aug

의 단점은 paste입력이 요인 일 때 수준을 버리고 interaction원래 요인의 순서를 유지한다는 것입니다. 이것은 그룹이 interaction접근 방식 으로 더 자연스럽게 정렬된다는 것을 의미합니다 .
Kota Mori

172

이 질문 의 예를 사용 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))
ivan866

59

예를 들면 :

 qplot(round, price, data=firm, group=id, color=id, geom='line') +  
      geom_smooth(aes(group=interaction(size, type)))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.