2012-11-19 3 views
1

요인별로 나란히 박스 플롯을 만들 때 문제가 있습니다. 몇 가지 예를 읽었지만 어떤 이유로 내 플롯이 올바르게 표시되지 않습니다. 나는 각 요소에 대해 boxplot을 그려보기 위해 노력하고 있다고 생각합니다.박스 플롯 요인 관련 문제

나는 다음과 같은 코드를 사용하고 있습니다 : 그 데이터 $ SAMP는 요인이 숫자보다는 그래서

samp.norm = rnorm(1000,0,1) 
samp.exp = rexp(1000,1) 
samp.unif = runif(1000) 
samp = c(samp.norm,samp.exp,samp.unif) 
dist = c(rep("norm",1000), rep("exp",1000), rep("unif",1000)) 
DATA = as.data.frame(cbind(samp,dist)) 
DATA$dist= as.factor(DATA$dist) 
p = ggplot(DATA, aes(x=factor(DATA$dist), y = DATA$samp)) + geom_boxplot() 
p 

답변

3

문제는 cbind()의 사용 것은 결과 객체를 강제 변환. cbind에서 생성 된 열은 동일한 클래스를 가져야합니다. 즉, 가장 낮은 공통적 인 demoninator 클래스 인 "character"를 의미합니다. 이것은 정확히 데이터 프레임이 발명 된 것입니다.

대신 당신이있어 더 복잡한 라인의

DATA=data.frame(samp,dist) 

을 시도하고 모두 작동합니다. 여담으로

은 또한이 있어야 오히려 두 번째 마지막 줄에 비해

p=ggplot(DATA, aes(x=dist, y = samp)) + geom_boxplot() 

훨씬 간단합니다. ggplot()에 DATA를 사용하도록 지정했으면 dist 및 samp를 찾을 위치를 말할 필요가 없습니다. 즉 DATA $ dist, dist 만 필요 없습니다. 또한 dist가 이미 하나의 요소이기 때문에 factor (dist)를 지정할 필요가 없습니다.

+0

감사합니다! 이제는 의미가 있습니다. 나는 그 길을 따라 어딘가에서 나쁜 R 프로그래밍 습관을 찾아 왔음에 틀림 없다. – Jonathan

0

+1 to @PeterEllis. 당신은 또한 그의 제안보다 더 간단하게 얻을 수 있습니다 :

boxplot(samp~dist) 

enter image description here