ggplot2 & stat_ellipse: рисовать эллипсы вокруг нескольких групп точек

Это может быть простым, но я пытаюсь нарисовать эллипсы вокруг моего лечения на моем графике PCoA.

Мой фрейм данных (sc):

             MDS1        MDS2 Treatment
X1xF1 -0.19736183 -0.24299825   1xFlood
X1xF2 -0.17409568 -0.29727596   1xFlood
X1xF3 -0.15272444 -0.28553837   1xFlood
S1    -0.06643271  0.47049959     Start
S2    -0.15143350  0.31152966     Start
S3    -0.26156297  0.12296849     Start
X3xF1  0.29840827  0.04581617  3xFloods
X3xF2  0.50503749 -0.07011503  3xFloods
X3xF3  0.20016537 -0.05488630  3xFloods

и мой код:

ggplot(data=sc,(aes(x=MDS1,y=MDS2,colour = Treatment)))+geom_point(size=3)+
  ggtitle("PCoA of samples at 'class' level(method='Bray')\n",sep=''))+
  theme_bw()+guides(colour = guide_legend(override.aes = list(size=3)))+
  stat_ellipse()

Он хорошо отображает PCoA до stat_ellipse(). Я пробовал это с различными параметрами и в лучшем случае я могу получить один эллипс для всего графика (хотя сейчас я не могу воспроизвести это).

Что мне нужно, так это три эллипса CI для трех процедур, окрашенных в тот же цвет, что и обработки. Любая помощь будет очень признательна!

Спасибо.


person RB88    schedule 17.06.2014    source источник
comment
Минимально воспроизводимый пример. Это довольно запутанный код, когда вы пытаетесь сосредоточиться на проблеме рисования эллипса.   -  person Señor O    schedule 17.06.2014
comment
Хороший вопрос, спасибо. Я удалил мусор, создающий фрейм данных, и просто оставил код ggplot2.   -  person RB88    schedule 17.06.2014


Ответы (1)


В пакете ggplot нет stat_ellipse(...), поэтому вы, должно быть, получили его откуда-то еще. Заботиться, чтобы поделиться?? Мне известно как минимум две версии, здесь и здесь. Ни один из них не работает с вашим набором данных, что странно, потому что оба работали с другими наборами данных.

В конце концов я остановился на варианте создания эллипсов извне для ggplot, что на самом деле не так уж сложно.

library(ggplot2)
library(ellipse)
centroids <- aggregate(cbind(MDS1,MDS2)~Treatment,sc,mean)
conf.rgn  <- do.call(rbind,lapply(unique(sc$Treatment),function(t)
  data.frame(Treatment=as.character(t),
             ellipse(cov(sc[sc$Treatment==t,1:2]),
                     centre=as.matrix(centroids[t,2:3]),
                     level=0.95),
             stringsAsFactors=FALSE)))

ggplot(data=sc,(aes(x=MDS1,y=MDS2,colour = Treatment)))+
  geom_point(size=3)+
  geom_path(data=conf.rgn)+
  ggtitle(paste("PCoA of samples at 'class' level(method='Bray')\n",sep=''))+
  theme_bw()+
  guides(colour = guide_legend(override.aes = list(size=3)))
person jlhoward    schedule 17.06.2014
comment
Основная проблема заключается в том, что stat_ellipse() является функцией-оболочкой для car::ellipse() и geom_path(), и ее параметры по умолчанию срабатывают при ограниченном количестве точек данных. - person Vlo; 17.06.2014
comment
Спасибо, джлховард. stat_ellipse() от devtools, извините, я забыл упомянуть об этом. Я пытался использовать ваш код, но эллипсы не появляются, он просто генерирует нормальный график, и я не могу понять, почему... - person RB88; 17.06.2014
comment
Попробуйте перезапустить R, затем точно скопируйте/вставьте код. - person jlhoward; 18.06.2014
comment
Это не сработало, к сожалению. Когда я набираю conf.rgn после запуска вашей функции, я получаю кадр данных 300 x 3 с столбцом 1 в качестве обработки (100 x каждая обработка), а столбцы 2 и 3 - как MDS1 и MDS2. Последние два столбца — «Нет данных», поэтому я думаю, что проблема именно в этом. - person RB88; 18.06.2014
comment
Трудно сказать, что здесь происходит. Получаете ли вы какие-либо сообщения об ошибках или предупреждения? Ваш код для создания sc загружает какие-либо пакеты? Если вы загрузите пакет car или загрузите пакет, требующий car, это замаскирует функцию ellipse(...). Но это должно привести к сообщениям об ошибках. - person jlhoward; 18.06.2014
comment
У меня работает! У меня был as.character(sc$Treatment), когда я устанавливал свои факторы, и удаление этого решило проблему. Теперь мне просто нужно переупорядочить легенду и изменить символы легенды, и я отсортирован. Спасибо за вашу помощь! - person RB88; 19.06.2014