R

[R] 파이차트란? R에서 파이차트 그리기 (Pie Chart in R)

슈퍼짱짱 2019. 8. 31. 08:00
반응형

파이차트 in R


지난 포스팅에서 범주형 자료를 표현하는 방법에 대해 알아보았다.

이번에는 그 방법 중 하나인 파이차트에 대해 알아보겠다.


>> 범주형 자료 표현하는 방법 바로가기




1. 파이차트란?


파이차트란? 먼저 원을 그리고 이 원을 상대도수에 비례하여 중심각을 나누어 마치 파이의 조각을 나눈 것과 같은 형태를 갖도록 하는 그림이다.


예시)

한 회사에서 새로 개발한 자동차의 외형에 대하여 고객 150명을 임의로 뽑아 선호도를 조사하였다.

150명 중에서 71명은 좋다고 답하고, 42명은 그저 그렇다고 하고, 28명은 싫다고 하고, 9명은 답을 하지 않았다.

조사에 대한 파이차트를 작성하라.


① 도수분포표 작성


>> 도수분포표란? 바로가기


답 

도수 

상대도수 

좋다 

71 

0.473 (=71/150) 

 그저 그렇다

28 

0.280 

싫다 

28 

0.187 

무응답 

0.060 

합 

150 

1.000 


② 도수분포표의 상대도수로 파이차트 작성





2. 파이차트 in R (basic)


위 예제를 R에서 구현하면 다음과 같다.


① data 생성


1
2
3
data <- data.frame("답"=c("좋다","그저 그렇다","싫다","무응답"),
                   "도수"=c(71,42,28,9))
data$'상대도수'<-round(data$도수/150,3)
cs


> data


           답 도수 상대도수

1        좋다   71    0.473

2 그저 그렇다   42    0.280

3        싫다   28    0.187

4      무응답    9    0.060


② pie chart


1
pie(data$상대도수)
cs





- 라벨 추가


1
pie(data$상대도수, labels=data$답)
cs



- 라벨에 상대도수 추가


1
2
pie(data$상대도수, 
    labels=paste(data$답, round(data$상대도수*100,1),"%"))
cs





3. pie chart in ggplot


① basic


1
2
3
ggplot(data, aes(x = "", y = 상대도수, fill = 답)) + 
  geom_bar(width = 1, stat = "identity") +
  coord_polar("y")
cs



② 나눠지는 부분 흰색 선 추가


1
2
3
ggplot(data, aes(x = "", y = 상대도수, fill = 답)) + 
  geom_bar(width = 1, stat = "identity", color = "white") +
  coord_polar("y")
cs



 theme 숨기기


1
2
3
4
ggplot(data, aes(x = "", y = 상대도수, fill = 답)) + 
  geom_bar(width = 1, stat = "identity", color = "white") +
  coord_polar("y") +
  theme_void()
cs



④ 그래프에 상대도수에 대한 text 추가


1
2
3
4
5
6
ggplot(data, aes(x = "", y = 상대도수, fill = 답)) + 
  geom_bar(width = 1, stat = "identity", color = "white") +
  coord_polar("y") +
  geom_text(aes(label = paste0(round(상대도수*100,1),"%")), 
            position = position_stack(vjust = 0.5)) +
  theme_void()
cs




⑤ change color


1
2
3
4
5
6
7
ggplot(data, aes(x = "", y = 상대도수, fill = 답)) + 
  geom_bar(width = 1, stat = "identity", color = "white") +
  coord_polar("y") +
  geom_text(aes(label = paste0(round(상대도수*100,1),"%")), 
            position = position_stack(vjust = 0.5)) +
  scale_fill_manual(values = c("red","orange","green","blue")) +
  theme_void()
cs



반응형