2014-09-16 6 views
5

R에서 pie 기능을 사용하면 레이블이 파이 외부에 나타납니다. 원형 차트의 각 조각 안에 레이블을 배치 할 수있는 방법이 있습니까?R - 파이 차트 내부에 레이블 넣기

f=table(LETTERS[c(rep(1,7),rep(2,10),rep(3,5))]) 
pie(f) 

그것은 ggplot 여기 place-labels-on-pie-chart이 작업을 수행하는 방법을 보여줍니다. pie 기능으로 수행 할 방법이 없습니까?

편집 : 파이 차트 사용에 대한 의견에 따라, 나는 그들과 내 의도를 상세히 설명하고자합니다. 저는 사실 파이 그래프를 산점도 행렬의 일부로 사용하여 회귀에 대한 전체 데이터 프레임을 시각화했습니다. 높은 절대 상관 짙은 착색 배경

  • 낮은 패널
    샘플 상관 수치를 다음과 같이 행렬을 설정한다. 배 숫자에 대한 숫자
  • 상자 그림으로 숫자에 대한
  • 상단 패널 는
    • 산점도
  • 대각선 패널
    • 히스토그램 요인
    • 에 대한 숫자
    • 원형 차트 정상 밀도

대각선에 대한 요인이 필요하고 파이 차트에서 결정했습니다. 나는 어쨌든 레이블을 남기로 결정하고 모든 축 레이블링도 해제했습니다. 오히려 더 큰 원형 조각에 더 어두운 색을 사용했기 때문에 아마도 정보를 표시하는 것은 좋지 않은 방법 일 수 있습니다. 그러나 요인 변수에 대해 잘 작동한다고 생각하여 바로 플롯보다 더 많은 요소 수준에서 관측치가 균형을 이루는 방식을 보여줍니다. 아래 그림은 lars 패키지에 설정된 당뇨병 데이터를 설명합니다.

diabetes data set

답변

4

내가 하드 코딩 된 라벨 위치로이 작업을 수행 할 수있는 쉬운 방법이 생각하지 않는다 -

body(pie) 

     if (!is.na(lab) && nzchar(lab)) { 
      lines(c(1, 1.05) * P$x, c(1, 1.05) * P$y) 
      text(1.1 * P$x, 1.1 * P$y, labels[i], xpd = TRUE, 
       adj = ifelse(P$x < 0, 1, 0), ...) 
     } 
    } 
    title(main = main, ...) 
    invisible(NULL) 
} 

의 끝에서 볼 그러나 당신이이 부분을 덮어 쓸 수는 프로그램

# create a new pie function to save overwriting original 
newpie <- pie 

# Tweak the label positions - changed 1.1 to 0.7 
# also commented out the lines function - so that the 
# small lines next to the labels are not plot 
newlbs <- quote(if (!is.na(lab) && nzchar(lab)) { 
        #lines(c(1, 1.05) * P$x, c(1, 1.05) * P$y) 
        text(0.7 * P$x, 0.7 * P$y, labels[i], xpd = TRUE, 
            adj = ifelse(P$x < 0, 1, 0), ...) 
}) 

# add in the new lines of code - trial and error found the right position 
body(newpie)[[22]][[4]][[7]] <- newlbs 

newpie(f) 

그래서 저조한 것처럼 보이지만 거기에 도착하면 텍스트의 각을 맞추거나 서식을 지정하기 위해 더 많은 작업을 수행해야합니다.

+1

멋진 해결 방법입니다. 통계에서 아무도 원형 차트를 사용해서는 안되기 때문에 원형 차트를 변경하는 것은 매우 어렵습니다. ;-) –

+0

환호성 Richard, 그렇습니다. 파이 파이 도움말을 인용하려고했습니다. 파이 차트는 정보를 표시하는 아주 나쁜 방법입니다. – user20650

+0

프로 팁 : 함수에'tail '을 사용할 수 있습니다. 즉,'tail 파이, 9)'는 스크롤해야했던'body' 호출과 같습니다. 물론 시체를 변경하려면'body <-'가 필요합니다. –