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 для трех процедур, окрашенные так же, как и процедуры. Любая помощь будет очень ценится!
Благодарю.
1 ответ
Здесь нет stat_ellipse(...)
в ggplot
пакет, так что вы, должно быть, получили его откуда-то еще. Заботиться, чтобы поделиться?? Есть как минимум две версии, которые мне известны, здесь и здесь. Кажется, что ни один из них не работает с вашим набором данных, что странно, потому что оба работали с другими наборами данных.
Я наконец остановился на варианте генерации эллипсов извне 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)))