2009-09-14 5 views
6

ggplot2를 사용하여 R에서 일부 불즈 아이 차트를 만듭니다. 차트에 불스 아이 층의 값을 표시하려는 경우를 제외하고 모두 매우 기쁘게 보입니다. 줄거리 나 줄거리의 오른쪽 아래에 놓기 만해도 행복 할 것입니다.하지만이 작업을 수행하는 데는 약간의 어려움이 있습니다. 여기 더 많은 불스 아이 음모가 R

다시 예제 데이터입니다 :

critters <- structure(list(Zoo = "Omaha", Animals = 50, Bears = 10, PolarBears = 3), .Names = c("Zoo", 
"Animals", "Bears", "PolarBears"), row.names = c(NA, -1L), class = "data.frame") 

그리고 음모하는 방법 :

d <- data.frame(animal=factor(c(rep("Animals", critters$Animals), 
     rep("Bears", critters$Bears), rep("PolarBears", critters$PolarBears)), 
     levels = c("PolarBears", "Bears", "Animals"), ordered= TRUE)) 
grr <- ggplot(d, aes(x = factor(1), fill = factor(animal))) + geom_bar() + 
    coord_polar() + labs(x = NULL, fill = NULL) + 
    scale_fill_manual(values = c("firebrick2", "yellow2", "green3")) + 
    opts(title = paste("Animals, Bears and Polar Bears:\nOmaha Zoo", sep="")) 

나는 말, 말,이 플롯의 오른쪽 아래 모서리를 목록을 추가 할 ,

Animals: 50 
Bears: 10 
PolarBears: 3 

그러나 나는 그 방법을 알 수 없습니다. 지금까지 annotate()으로 나의 노력은 부분적으로 극좌표에 의해 저지되었습니다. 타이틀에 번호를 추가해야만한다면 더 좋은 해결책을 원할 것입니다. 미리 감사드립니다.

EDIT : 다음 사람에게 중요한 메모 : 불스 아이는 극좌표에 매핑 된 막대 그림입니다. 막대 그래프의 ggplot2 기본값은 눈에 띄게 막대 그래프를 쌓아 올리는 것입니다. 그러나 이는 귀하의 땡기 반지도 겹쳐서 표시된다는 것을 의미합니다 (예 : 반경이 가장 큰 그룹의 크기 대신에 3 개의 그룹 63의 합계 인 50). I 은 대부분의 사람들이 불스 아이 음모로 기대하는 것, 특히 그룹이 중첩되어 있다고 생각하는 것입니다. geom_bar(position = position_identity())을 사용하면 스택 링을 계층화 된 원으로 바꿀 수 있습니다.

편집 2 : 예 ggplot2 문서에서 :
enter image description here

+0

필요없이이 사과로 귀하의 질문에. 좋은 질문과 나는 대답을 읽는 것을 배웠다. –

+1

땡기를 플로팅하는 것에 대해 주로 사과해야합니다. 특히 시리즈에서는 특히 그렇습니다. 바브 Plot은 (적어도 나를 위해) 비교하기가 훨씬 쉽습니다. –

답변

4

당신은 전설에 번호를 추가 할 수 있습니다.

library(ggplot2) 
critters <- structure(list(Zoo = "Omaha", Animals = 50, Bears = 10, PolarBears = 3), .Names = c("Zoo", "Animals", "Bears", "PolarBears"), row.names = c(NA, -1L), class = "data.frame") 
d <- data.frame(animal=factor(c(rep("Animals", critters$Animals), 
     rep("Bears", critters$Bears), rep("PolarBears", critters$PolarBears)), 
     levels = c("PolarBears", "Bears", "Animals"), ordered= TRUE)) 
levels(d$animal) <- apply(data.frame(table(d$animal)), 1, paste, collapse = ": ") 
ggplot(d, aes(x = factor(1), fill = factor(animal))) + geom_bar() + 
    coord_polar() + labs(x = NULL, fill = NULL) + 
    scale_fill_manual(values = c("firebrick2", "yellow2", "green3")) + 
    opts(title = paste("Animals, Bears and Polar Bears:\nOmaha Zoo", sep="")) 
5

당신은 또한 플롯에 직접 추가 할 수 있습니다

grr <- ggplot(d, aes(x = factor(1), fill = factor(animal))) + geom_bar() + 
coord_polar() + labs(x = NULL, fill = NULL) + 
scale_fill_manual(values = c("firebrick2", "yellow2", "green3")) + 
opts(title = paste("Animals, Bears and Polar Bears:\nOmaha Zoo", sep=""))+ 
geom_text(y=c(3,10,50)-3,label=c("3","10","50"),size=4) 
grr 
+0

좋은 답변입니다! 그것이 내가가는 길이기 때문에 나는 다른 최상의 대답을했다. –