2014-03-28 1 views
0

필자는 데이터의 여러 부분 집합을 나타내는 여러 분산 형 플롯을 사용합니다. 나는 시각적으로 데이터의 부분 집합의 겹침/부족을 시각적으로 표현하는 방법을 찾고 싶다. R 또는 Matlab에서 데이터의 평균 및 분산을 고려한 타원형으로 각 데이터 집합을 변환하는 가장 좋은 방법은 무엇입니까? 나는 본질적으로 3 개의 분리 된 산점도를 벤 다이어그램으로 바꾸고 싶다. A는 @hrbrmstr 의해 연결된 Q &에 제시된 해결책에 추가Venn 도표 방식으로 산점도 데이터를 나타 냅니까?

+0

다른 하위 집합에서 오는 도트의 색상은 어떻습니까? 줄임표를 추가하는 것은 물론 할 수 있지만, 다른 색상은 쉽게 죽습니다. –

+2

This : http://stats.stackexchange.com/questions/30788/whats-a-good-way-to-use-r-to-make-a-scatterplot-that-separates-the-data-by-trea 당신이 찾고있는 것일 수도 있습니다 – hrbrmstr

+0

예, 완벽합니다! – user1566200

답변

2

, 그것의 litteral 표현 볼록 포를 사용하여 달성 될 수

library(scales) #Only for the transparency effect 
data(iris) 
plot(iris$Sepal.Length, iris$Sepal.Width, type="n") 
a <- split(iris, iris$Species) #Separate the dataset by ID (here species) 
for(i in seq_along(a)){ 
    h <- chull(a[[i]]) #Compute convex hull for each group 
    h <- c(h, h[1]) 
    polygon(a[[i]][h,], col=alpha(i,.5), border=NA) #Plot it 
    } 
points(iris$Sepal.Length, iris$Sepal.Width, col=iris$Species, pch=19) #Add data points 

enter image description here

+0

데이터 집합으로이 작업을 시도하면 "In data.matrix (x) : NAs as coercion"오류가 발생하고 결과 컨벡스 헐이 보이지 않게됩니다. 어떤 아이디어? – user1566200

+0

@ user1566200 데이터를 보지 않고서도이 문제의 원인을 정확히 알 수 없습니다. 파란 색에서 데이터 유형 문제라고 가정합니다. 숫자 여야하는 모든 것이 실제로는 숫자이며 문자 또는 요소가 아닌지 확인하십시오. – plannapus

+0

고마워, 그게 그거야. 그 안에 끈이 있었다. 이것은 아름답게 보입니다. points()를 사용하여 색상 범례를 추가하는 방법이 있습니까? 도움이되는 곳 어디에서도 보지 마세요. – user1566200

2

당신은 ellipse 함수를 사용할 수도 타원 패키지에서 타원의 점을 계산하려면 각 데이터 그룹에 대해 타원 함수에 평균, 표준 편차 및 상관 관계를 부여한 다음 결과를 lines 함수에 전달하여 산점도에 추가합니다. 그룹이 적당하다면 잘 작동하지만, 그룹에 강한 왜곡이 있으면 타원이 잘 맞지 않습니다.

다른 옵션은 chull 함수를 사용하여 그룹의 모든 점을 포함하는 복잡한 선체를 계산하는 것입니다. 이것을 사용하여 모든 점을 포함하는 폴리곤을 그릴 수 있습니다 (일부는 폴리곤을 만질 것입니다). 다각형보다 더 부드러운 것을 원하면 lines 또는 polygon이 아닌 xspline 함수를 사용하여 도면을 작성하십시오. 다음은 몇 가지 예제 코드입니다 :

with(iris, plot(Petal.Width, Petal.Length, col=c('red','green','blue')[Species])) 

tmp <- chull(iris[ iris$Species=='setosa', c('Petal.Width','Petal.Length')]) 
xspline(iris[ iris$Species=='setosa', c('Petal.Width','Petal.Length')][tmp,], 
    border='red',open=FALSE, shape= -0.75) 

tmp <- chull(iris[ iris$Species=='versicolor', c('Petal.Width','Petal.Length')]) 
xspline(iris[ iris$Species=='versicolor', c('Petal.Width','Petal.Length')][tmp,], 
    border='green',open=FALSE, shape= -0.75) 

tmp <- chull(iris[ iris$Species=='virginica', c('Petal.Width','Petal.Length')]) 
xspline(iris[ iris$Species=='virginica', c('Petal.Width','Petal.Length')][tmp,], 
    border='blue',open=FALSE, shape= -0.75) 



library(ellipse) 

with(iris, plot(Petal.Width, Petal.Length, col=c('red','green','blue')[Species])) 

polygon(ellipse( 
    var(iris[ iris$Species=='setosa', c('Petal.Width','Petal.Length') ]), 
    centre=colMeans(iris[ iris$Species=='setosa', c('Petal.Width','Petal.Length') ]), 
    t=3), 
    border='red') 

polygon(ellipse( 
    var(iris[ iris$Species=='versicolor', c('Petal.Width','Petal.Length') ]), 
    centre=colMeans(iris[ iris$Species=='versicolor', c('Petal.Width','Petal.Length') ]), 
    t=3), 
    border='green') 

polygon(ellipse( 
    var(iris[ iris$Species=='virginica', c('Petal.Width','Petal.Length') ]), 
    centre=colMeans(iris[ iris$Species=='virginica', c('Petal.Width','Petal.Length') ]), 
    t=3), 
    border='blue')