2012-04-20 1 views
4

I가 기본 스택 줄거리 :ggplot2 플롯에서 값의 하위 집합을 강조 표시하려면 어떻게해야합니까? 예를 들어

ggplot(diamonds, aes(x=factor(color),fill=factor(cut)))+geom_bar(position="fill")

나는 3 이상 "캐럿"값이 작은 하위 집합 다이아몬드가 :

subset(diamonds,carat>3) 

을하고 난에이 특정 값을 강조 할 분포의 어느 부분이 거짓인지를보기 위해 음모 (우리의 다이아몬드에 ID가있는 경우 점이나 레이블과 같은). 그런 일을 할 가능성이 있습니까?

추신 : 유감스럽게도 피겨를 게시 할 수 없습니다.

답변

2

다음은 "3보다 큰 캐럿"의 수를 막대 세그먼트에 삽입합니다. 문제를 여러 단계로 나누었습니다. 1 단계 : "3보다 큰 캐럿"을 식별하는 새로운 변수. 2 단계 : 각 색상과 컷에 대한 다이아몬드의 요약표를 얻고 각 색상과 컷에 대해 "3보다 큰 캐럿"을 얻습니다 .Plyr 패키지에서 ddply() 함수를 사용했습니다. 3 단계 : 막대 도표에 레이블을 붙이는 방법 4 단계 : 레이블의 y 위치를 나타내는 변수를 요약 테이블에 추가 5 단계 : 그림에 geom_text 계층 추가 geom_text의 데이터 프레임은 요약 테이블입니다. 레이블 (이 경우 "3보다 큰 캐럿"에 대한 계수), y 위치 (이전 단계에서 계산 된) 및 x 위치 (색상).

library(ggplot2) 
library(plyr) 

# Step 1 
diamonds$caratGT3 = ifelse(diamonds$carat > 3, 1, 0) 

# Step 2 
diamonds2 = ddply(diamonds, .(color, cut), summarize, CountGT3 = sum(caratGT3)) 
diamonds2$Count = count(diamonds, .(color, cut))[,3] 
diamonds2 

# Step 3 
p = ggplot() + geom_bar(data = diamonds, aes(x=factor(color),fill=factor(cut))) 

# Step 4 
diamonds2 <- ddply(diamonds2,.(color), 
     function(x) { 
      x$cfreq <- cumsum(x$Count) 
      x$pos <- (c(0,x$cfreq[-nrow(x)]) + x$cfreq)/2 
      x 
     }) 

# Step 5 
(p <- p + geom_text(data = diamonds2, 
    aes(x = factor(color), y = pos, label = CountGT3), 
    size = 3, colour = "black", face = "bold")) 

enter image description here