2013-09-03 2 views
5

Я хотел бы group мои данные, основанные на взаимодействии двух переменных, но только отображающие эстетику одной из этих переменных. (Другая переменная представляет собой репликации, которые теоретически должны быть эквивалентны друг другу). Я могу найти неэлегантные способы сделать это, но похоже, что это должен быть более элегантный способ сделать это.`geom_line()` связывает точки, сопоставленные с разными группами

Например

# 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)) + 
    geom_point() + geom_line() 

enter image description here

Это почти получает это право, за исключением того, что я не хочу, чтобы представить точки с различными формами. Похоже, что group=interaction(treatment, replicate) бы помочь (например, на основе this question, но geom_line() еще соединяет точки в разных группах:

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

enter image description here

я могу решить эту проблему, вручную создавая колонки взаимодействия и group Ing тем, что:

d$interact <- interaction(d$replicate, d$treatment) 

ggplot(d, aes(x=x, y=y, colour=treatment, group=interact)) + 
    geom_point() + geom_line() 

enter image description here

, но похоже, что должно быть больше ggplot2 -нативный способ получить geom_line, чтобы соединяться только точки из той же группы.

+1

Почему вы помещаете 'взаимодействие (« обрабатывать »,« реплицировать »)' во втором примере не фактические имена столбцов? Для меня «группа = взаимодействие (лечение, репликация)» дает ожидаемый результат –

+0

возможный дубликат [группа по двум столбцам в ggplot2] (http://stackoverflow.com/questions/9968976/group-by-two-columns-in- ggplot2) –

+0

Разница в том, что в цитированном вопросе (который я хотел связать изначально, теперь отредактирован, чтобы добавить ссылку), ответ _does_ использует кавычки, но он также использует 'qplot'. Я полагаю, что 'qplot' нуждается в переменных в кавычках, тогда как' ggplot' принимает их напрямую. –

ответ

5

Ваш код работает, если вы выполняете следующее. Я думаю, что у вас была проблема, потому что aes обрабатывал "treat" и "replicate" в качестве векторов, поэтому он был эквивалентен group = 1.

ggplot(d, aes(x=x, y=y, colour=treatment, group=interaction(treatment, replicate))) + 
    geom_point() + geom_line() 
Смежные вопросы