11.3 박스 그래프

박스 그래프(Box Plot)는 Box-and-Whiskers Plot 이라고도 하는데요, 연속형 변수에 대해 min, Q1, median, Q3, max, lower whisker, upper whisker, outlier (IQR(Inter-Quartile Range)의 1.5배 초과 시) 등을 한눈에 볼 수 있게 그린 그래프로 그림 11.29 와 같은 형태를 가집니다.

연속형안 하나의 변수에 대해 분포의 중심, 퍼짐 정도(variance), 치우침 정도(skewness), 이상치/특이값(outlier) 존재 여부, 대칭성(symmetry) 등을 알 수 있는 매우, 매우, 매우 유용한 그래프라고 하겠습니다.

특히 박스 그래프는 이상치에 덜 민감한(robust) 중앙값, IQR 값을 사용한다는 점에서 이상치에 민감한 평균, 표준편차 대비 중심 경향과 퍼짐 정도를 파악하는데 있어 상대적으로 더 믿을 만하다고 말할 수 있습니다. 상당히 유용하겠지요?!

박스 플롯의 구성

Figure 11.29: 박스 플롯의 구성

이번 절에서는 먼저 ggplot2 패키지의 geom_boxplot() 를 활용해서 박스그래프(박스 플롯, 수염상자 그림, 상자그림 등으로 불림)을 그리는 방법에 대해서 알아보겠습니다.

11.3.1 데이터 세트

데이터는 MASS 패키지에 들어있는 Cars93 데이터 프레임 데이터 셋에서 가격(Price)과 자동차유형(Type) 변수를 활용하여 박스 그래프를 그려보겠습니다.

library(ggplot2)
# Cars93 데이터 프레임
library(MASS)
str(Cars93)

11.3.2 기본 박스 그래프

그럼, 먼저 Cars93 데이터 프레임 내 가격(Price) 변수 하나를 가지고 geom_boxplot()을 사용하여 박스 그래프(Box Plot)을 그려보겠습니다.

# 기본 박스 그래프 그리기
ggplot(Cars93, 
       aes(x = 1,           # 박스 그래프는 기본적으로 x = 1로 설정합니다.
           y = Price)) +    # Y축의 변수로 Price를 설정합니다.
      geom_boxplot()        # 박스 그래프를 그립니다.
기본 박스 그래프

Figure 11.30: 기본 박스 그래프

Go Top

11.3.3 X축의 이름과 척도 없애기

기본 박스 그래프를 그려 보면 X 축에 의미가 없는 척도가 표시가 됩니다. scale_x_continuous() 함수의 모수에 breaks = NULL을 설정하여 X축의 이름을 없애고, theme() 함수의 모수에 axis.title.x = element_blank() 를 설정하여 X축의 척도를 생략할 수 있습니다.

# X축의 이름과 척도 없애기
ggplot(Cars93, aes(x = 1, y = Price)) + 
       geom_boxplot() + 
       scale_x_continuous(breaks = NULL) +         # x축 척도 생략
       theme(axis.title.x = element_blank()) +     # x축 이름름 생략
       ggtitle("X축의 이름과 척도 없애기")
X축의 이름과 구분자 없애기

Figure 11.31: X축의 이름과 구분자 없애기

Go Top

11.3.4 이상값의 표현

앞에서의 박스 그래프에는 가격(Price) 데이터의 이상치(outliers)가 표시되고 있는데, 이러한 이상치를 표시하는데 있어서 크기는 outlier.size, 모양은 outlier.shape, 그리고 색은 outlier.colour 등의 모수를 이용합니다.

다음의 예는 이상치 데이터에 대하여 모양을 13번 모양6으로 하고, 그 크기는 3(기본 값은 1)으로 그리고 색은 “red”로 표시하는 예입니다.

# 박스 플롯의 이상치 표시
ggplot(Cars93, aes(x = 1, y = Price)) + 
       geom_boxplot(outlier.size = 3,                        # 이상치 데이터 기호의 크기를 3으로 설정합니다.
                    outlier.shape = 13,                      # 이상치 데이터 기호의 모양을 13으로 설정합니다.
                    outlier.colour = "red") +                # 이상치 데이터 기호의 색을 "red"로 설정합니다.
       scale_x_continuous(breaks = NULL) +                  
       theme(axis.title.x = element_blank()) +              
       ggtitle("박스 플롯의 이상치 표시")
박스 플롯의 이상치 표시

Figure 11.32: 박스 플롯의 이상치 표시

Go Top

11.3.5 박스 그래프에 데이터를 점으로 표시하기

박스 그래프에 geom_jitter() 함수를 이용하여 데이터를 점으로 표시할 수 있습니다.

또한 geom_jitter() 함수 안의 shape 모수를 이용하여 점의 모양7을 그리고 position 모수를 이용하여 점의 위치를 설정할 수 있습니다.

#  박스 그래프에 데이터를 점으로 표시하기
ggplot(Cars93, aes(x = 1, y = Price)) + 
       geom_boxplot(outlier.size = 3,                        
                    outlier.shape = 13,                      
                    outlier.colour = "red") +                
       geom_jitter() +
       scale_x_continuous(breaks = NULL) +                  
       theme(axis.title.x = element_blank()) +   
       ggtitle(" 박스 그래프에 데이터를 점으로 표시하기")
박스 그래프에 데이터를 점으로 표시하기

Figure 11.33: 박스 그래프에 데이터를 점으로 표시하기

#  박스 그래프에 데이터를 점으로 표시하기
ggplot(Cars93, aes(x = 1, y = Price)) + 
       geom_boxplot(outlier.size = 3,                        
                    outlier.shape = 13,                      
                    outlier.colour = "red") +                
       geom_jitter(shape = 16,                              # 데이터 기호의 모양을 16으로 설정합니다.
                   position = position_jitter(width = 0.1, height = 0.1)) + # 점의 위치를 설정합니다.
       scale_x_continuous(breaks = NULL) +                  
       theme(axis.title.x = element_blank()) +   
       ggtitle(" 박스 그래프에 데이터를 점으로 표시하기")
박스 그래프에 데이터를 점으로 표시하기

Figure 11.34: 박스 그래프에 데이터를 점으로 표시하기

Go Top

11.3.6 수평 박스 그래프

coord_flip() 함수를 추가하여 박스 그래프를 수평으로 회전시킬 수 있습니다.

# 수평 박스 그래프
ggplot(Cars93, aes(x = 1, y = Price)) + 
       geom_boxplot(outlier.size = 3,                        
                    outlier.shape = 13,                      
                    outlier.colour = "red") +                
       geom_jitter(shape = 16,                              
                   position = position_jitter(width = 0.1, height = 0.1)) + 
       scale_x_continuous(breaks = NULL) +                  
       theme(axis.title.x = element_blank()) +   
       ggtitle("수평 박스 그래프") +
       coord_flip()                                       # 박스 그래프를 수평으로 회전시킵니다.
수평 박스 그래프

Figure 11.35: 수평 박스 그래프

Go Top

11.3.7 노치 박스 그래프

geom_boxplot() 함수에 notch = TRUE 모수를 추가하여 박스의 허리가 V자 모양인 노치 박스 그래프를 그릴 수 있습니다.

# 수평 박스 그래프
ggplot(Cars93, aes(x = 1, y = Price)) + 
       geom_boxplot(outlier.size = 3,                        
                    outlier.shape = 13,                      
                    outlier.colour = "red",
                    notch = TRUE) +                # 노치 박스 그래프를 그립니다.
       geom_jitter(shape = 16,                              
                   position = position_jitter(width = 0.1, height = 0.1)) + 
       scale_x_continuous(breaks = NULL) +                  
       theme(axis.title.x = element_blank()) +   
       ggtitle(" 노치 박스 그래프") +
       coord_flip()                                       
V 자형 박스 그래프

Figure 11.36: V 자형 박스 그래프

Go Top

11.3.8 박스 그래프의 색 지정하기

또한 geom_boxplot() 함수에 col 모수를 추가하여 박스 그래프의 색을 설정할 수 있습니다.

# 박스 그래프의 색 지정하기
ggplot(Cars93, aes(x = 1, y = Price)) + 
       geom_boxplot(outlier.size = 3,                        
                    outlier.shape = 13,                      
                    outlier.colour = "red",
                    notch = TRUE,
                    col = "blue") +                # 박스 그래프의 색을 지정합니다.
       geom_jitter(shape = 16,                              
                   position = position_jitter(width = 0.1, height = 0.1)) + 
       scale_x_continuous(breaks = NULL) +                  
       theme(axis.title.x = element_blank()) +   
       ggtitle("박스 그래프의 색 지정하기") +
       coord_flip()   
박스 그래프 : 색 지정

Figure 11.37: 박스 그래프 : 색 지정

Go Top

11.3.9 박스 그래프에 평균 추가하기

박스 그래프의 박스 가운데 선은 평균이 아닌 중앙값(Median)을 나타냅니다.

따라서 박스 그래프에 평균을 표시해 보도록 하겠습니다. 평균은 이상치에 민감하므로 아래 예제처럼 이상치가 있는 경우에는 중심화 경향을 나타내는 통계량으로 부적합하며, 박스 그림의 박스 가운데에 쳐진 선이 의미하는 중앙값(Median) 이 더 적합한 중심화 경향 지표라고 하겠습니다.

평균을 추가하기 위해서는 stat_summary() 함수를 이용합니다. 그리고 fun.y = “mean” 모수를 추가해 줍니다. 다음의 예에서는 동시에 기호의 모양, 크기, 그리고 색도 지정하고 있습니다.

# 박스 그래프에 평균 추가하기
ggplot(Cars93, aes(x = 1, y = Price)) + 
       geom_boxplot() +
       stat_summary(fun.y = "mean",     # Y축의 평균값을 산출합니다
                    geom = "point",     # 점으로 표시합니다.
                    shape = 8,          # 점의 모양을 8로 지정합니다.
                    size = 3,           # 점의 크기를 지정합니다.
                    colour = "blue") +  # 점의 색을 지정합니다.
       ggtitle("박스 그래프에 평균 표시하기")
## Warning: `fun.y` is deprecated. Use `fun` instead.
박스 그래프에 평균 표시하기

Figure 11.38: 박스 그래프에 평균 표시하기

다음의 예는 x축을 자동차 유형(Type)으로 하고 y축을 자동차 가격(Price)로 하는 박스 그래프를 그리고 각 자동차 유형별 평균 가격을 점으로 나타내고 있습니다.

# 박스 그래프에 평균 추가하기
ggplot(Cars93, aes(x = Type, y = Price)) + 
       geom_boxplot(width = 0.8, outlier.size = 3, outlier.shape = 16, outlier.colour = "red") +
       stat_summary(fun.y = "mean",                # Y축의 평균값을 산출합니다
                    geom = "point",                # 점으로 표시합니다.
                    shape = 8,                     # 점의 모양을 8로 지정합니다.
                    size = 3,                      # 점의 크기를 지정합니다.
                    colour = "blue") +             # 점의 색을 지정합니다.
       ggtitle("박스 그래프에 자동차 유형별 가격의 평균 표시하기")
## Warning: `fun.y` is deprecated. Use `fun` instead.
박스 그래프에 자동차 유형별 가격의 평균 표시하기

Figure 11.39: 박스 그래프에 자동차 유형별 가격의 평균 표시하기

Go Top

11.3.10 stat_boxplot() 함수의 이용

geom_*() 함수들은 기본적인 stat_*() 함수를 가지고 있습니다.8 args(geom_boxplot)로 확인해 보면 geom_boxplot() 함수는 stat = "boxplot"를 알고리즘으로 사용하고 있습니다.

geom_boxplot() 함수의 경우에는 stat_boxplot() 함수가 여기에 해당하며, geom_boxplot() 함수 대신에 stat_boxplot() 함수를 이용할 수 있습니다.

# 기본 박스 그래프 그리기
ggplot(Cars93, 
       aes(x = 1, 
           y = Price)) +
      stat_boxplot()                      # 박스 그래프를 그립니다.
기본 박스 그래프 : stat_boxplot() 함수 이용

Figure 11.40: 기본 박스 그래프 : stat_boxplot() 함수 이용

자세한 사항은 ? stat_boxplot()로 확인하기 바랍니다.

11.3.11 그룹별 박스 그래프

그룹별 박스 그래프의 경우도 앞에서의 그룹별 히스토그램그룹별 커널 밀도 곡선에서 처럼 aes() 함수의 모수를 이용하거나, facet_grid() 함수와 facet_wrap() 함수를 이용하여 그룹별 박스 그래프를 작성할 수 있습니다.

11.3.11.1 aes() 함수의 모수 이용

다음으로, 차종별(Type)로 가격(Price) 변수에 대해 박스 그래프를 그려보겠습니다. aes(x = factor.variable) 을 입력해주면 되겠습니다.

여기서 주의할 점은 x 는 요인(factor)형 변수가 입력되어야 합니다. 차종(Type)은 이미 요인형 변수이므로 그대로 입력하면 됩니다. 만약 요인형 변수가 아니라면 x=factor(variable name) 이런 식으로 입력해주거나, 아니면 형 변환 함수인 as.factor() 함수를 이용하여 데이터 형태를 요인형 변수로 변경해도 좋습니다.

한편 이러한 차종별(Type) 그룹별 박스 그래프의 테두리 색을 지정하고 싶다면, aes() 함수에 colour = factor.variable을 삽입해 주면 됩니다. 그리고 박스의 색을 채우고 싶다면 aes() 함수에 fill = factor variable를 추가해 주면 됩니다.

그런데 colourfill 모수는 동시에 사용하기 보다는 둘 중의 하나를 선택하는 것이 좋을 것 같습니다.

## 그룹별 박스 그래프 : aes() 모수 이용
# 차종별(Type) 박스 그래프
ggplot(Cars93, 
       aes(x = Type,                                  # x 축에 요인형(그룹) 변수를 지정합니다.
           y = Price)) +                              # y 축에 일변량 연속형 변수를 지정합니다.
       geom_boxplot(width=0.8, outlier.size=3, outlier.shape=16, outlier.colour="red") +
       ggtitle("차종별(Type) 박스그래프")
차종별 박스 그래프와 색 지정하기

Figure 11.41: 차종별 박스 그래프와 색 지정하기

# 차종별(Type) 박스 그래프 : 테두리 색 지정
ggplot(Cars93, 
       aes(x = Type,                                  # x 축에 요인형(그룹) 변수를 지정합니다.
           y = Price,                                 
           colour = Type)) +                          # aes() 함수의 모수 colour 에 요인형 변수 지정.
       geom_boxplot(width=0.8, outlier.size=3, outlier.shape=16, outlier.colour="red") +
       ggtitle("차종별(Type) 박스그래프 : 테두리 색 지정")
차종별 박스 그래프와 색 지정하기

Figure 11.42: 차종별 박스 그래프와 색 지정하기

# 차종별(Type) 박스 그래프 : 색 채우기
ggplot(Cars93, 
       aes(x = Type,                                  # x 축에 요인형(그룹) 변수를 지정합니다.
           y = Price,                                 
#           colour = Type,                            # 테두리 색을 지정합니다.
           fill = Type)) +                            # 박스 그래프를 채울 색을 지정합니다.
       geom_boxplot(width=0.8, outlier.size=3, outlier.shape=16, outlier.colour="red") +
       ggtitle("차종별(Type) 박스그래프 : 색 채우기")
차종별 박스 그래프와 색 지정하기

Figure 11.43: 차종별 박스 그래프와 색 지정하기

11.3.11.2 facet_grid() 함수 이용

aes() 함수에 x = Type 모수를 추가하고, facet_grid( . ~ Type)을 추가해 줍니다. (facet_grid(vars(Type)) 또는 facet_type(Type ~ .) 등은 바람직 하지 않습니다.)

## 그룹별 박스 그래프 : facet_grid() 함수 이용
# 차종별(Type) 박스그래프 
ggplot(Cars93, 
       aes(y = Price)) +                             
  geom_boxplot(width=0.8, outlier.size=3, outlier.shape=16, outlier.colour="red") +
  scale_x_continuous(breaks = NULL) +                  # x축 이름 생략
  theme(axis.title.x = element_blank()) +              # x축 척도 생략
  facet_grid( . ~ Type) +                              # Type 별로 박스 그래프를 그립니다.
  ggtitle("차종별(Type) 박스그래프 : facet_grid() 함수")
차종별 박스 그래프 : facet_grid()

Figure 11.44: 차종별 박스 그래프 : facet_grid()

# 차종별(Type) 박스그래프 : 색 지정하기 (테두리 선)
ggplot(Cars93, 
       aes(y = Price,
           colour = Type)) +                             
  geom_boxplot(width=0.8, outlier.size=3, outlier.shape=16, outlier.colour="red") +
  scale_x_continuous(breaks = NULL) +                  # x축 이름 생략
  theme(axis.title.x = element_blank()) +              # x축 척도 생략
  facet_grid( . ~ Type) +                              # Type 별로 박스 그래프를 그립니다.
  ggtitle("차종별(Type) 박스그래프 : facet_grid() 함수")
차종별 박스 그래프 : facet_grid()

Figure 11.45: 차종별 박스 그래프 : facet_grid()

# 차종별(Type) 박스그래프 : 색 지정하기 (채우기)
ggplot(Cars93, 
       aes(y = Price,
           fill = Type)) +                             
  geom_boxplot(width=0.8, outlier.size=3, outlier.shape=16, outlier.colour="red") +
  scale_x_continuous(breaks = NULL) +                  # x축 이름 생략
  theme(axis.title.x = element_blank()) +              # x축 척도 생략
  facet_grid( . ~ Type) +                              # Type 별로 박스 그래프를 그립니다.
  ggtitle("차종별(Type) 박스그래프 : facet_grid() 함수")
차종별 박스 그래프 : facet_grid()

Figure 11.46: 차종별 박스 그래프 : facet_grid()

11.3.11.3 facet_wrap() 함수 이용

aes() 함수에 x = Type 모수를 추가하고, facet_wrap(~ Type, ncol = 3)을 추가해 줍니다.

## 그룹별 박스 그래프 : facet_wrap() 함수 이용
# 차종별(Type) 박스그래프 
ggplot(Cars93, 
       aes(y = Price)) +                             
  geom_boxplot(width=0.8, outlier.size=3, outlier.shape=16, outlier.colour="red") +
  scale_x_continuous(breaks = NULL) +                  
  theme(axis.title.x = element_blank()) +              
  facet_wrap(~ Type, ncol = 3) +                       # Type 별로 박스 그래프를 3열로 그립니다.
  ggtitle("차종별(Type) 박스그래프 : facet_wrap() 함수")
차종별 박스 그래프 : facet_wrap()

Figure 11.47: 차종별 박스 그래프 : facet_wrap()

# 차종별(Type) 박스그래프 : 테두리 선
ggplot(Cars93, 
       aes(y = Price,
           colour = Type)) +                           # 테두리 선의 색을 지정합니다.                      
  geom_boxplot(width=0.8, outlier.size=3, outlier.shape=16, outlier.colour="red") +
  scale_x_continuous(breaks = NULL) +                  
  theme(axis.title.x = element_blank()) +              
  facet_wrap(~ Type, ncol = 3) +                       # Type 별로 박스 그래프를 3열로 그립니다.
  ggtitle("차종별(Type) 박스그래프 : facet_wrap() 함수")
차종별 박스 그래프 : facet_wrap()

Figure 11.48: 차종별 박스 그래프 : facet_wrap()

# 차종별(Type) 박스그래프 : 색 채우기
ggplot(Cars93, 
       aes(y = Price,
           fill = Type)) +                             # 채우기 색을 지정합니다.                      
  geom_boxplot(width=0.8, outlier.size=3, outlier.shape=16, outlier.colour="red") +
  scale_x_continuous(breaks = NULL) +                  
  theme(axis.title.x = element_blank()) +              
  facet_wrap(~ Type, ncol = 3) +                       # Type 별로 박스 그래프를 3열로 그립니다.
  ggtitle("차종별(Type) 박스그래프 : facet_wrap() 함수") 
차종별 박스 그래프 : facet_wrap()

Figure 11.49: 차종별 박스 그래프 : facet_wrap()

Go Top

11.3.12 두 개의 요인형 변수를 고려한 박스 그래프

만약 차종(Type)과 생산지(Origin)의 두 기준/그룹으로 구분해서 박스 그래프를 그리고 싶다면 이 경우에도 aes() 함수의 모수를 이용하는 방법, facet_grid() 함수를 이용하는 방법 그리고 facet_wrap()을 이용하는 방법을 생각할 수 있습니다.

11.3.12.1 aes() 함수의 모수 이용

aes(fill = Origin) 또는 aes(color = Origin) 을 추가해 주면 됩니다.

# 두 기준/그룹별 박스 그래프 그리기 : aes() 함수의 모수 이용
# fill 모수 지정
ggplot(Cars93, 
       aes(x = Type,                         # Type 변수를 X로 지정합니다.
           y = Price, 
           fill = Origin)) +                 # Orgin 변수를 fill의 값으로 지정합니다.
       geom_boxplot(width=0.8, outlier.size=3, outlier.shape=16, outlier.colour="red") +
       ggtitle("차종과 생산지 별 박스 그래프 : fill")
차종별 생산지별 박스 그래프 : aes()

Figure 11.50: 차종별 생산지별 박스 그래프 : aes()

# colour 모수 지정
ggplot(Cars93, 
       aes(x = Type,                         # Type 변수를 X로 지정합니다.
           y = Price, 
           colour = Origin)) +               # Orgin 변수를 colour의 값으로 지정합니다.
       geom_boxplot(width=0.8, outlier.size=3, outlier.shape=16, outlier.colour="red") +
       ggtitle("차종과 생산지 별 박스 그래프 : colour") 
차종별 생산지별 박스 그래프 : aes()

Figure 11.51: 차종별 생산지별 박스 그래프 : aes()

11.3.12.2 facet_grid() 함수의 이용

첫 번째 기준으로 차종(Type)을 그리고 두 번째 기준으로 생산지(Origin)로 해서 박스 그래프를 그리고자 하는 경우, facet_grid(Origin ~ Type)으로 설정해 줍니다.

# 두 기준/그룹별 박스 그래프 그리기 : facet_grid() 함수의 이용
ggplot(Cars93, 
       aes(x = Type,                         # Type 변수를 X로 지정합니다.
           y = Price, 
           fill = Origin)) +                 # Orgin 변수를 fill(색 채우기)의 값으로 지정합니다.
  geom_boxplot(width=0.8, outlier.size=3, outlier.shape=16, outlier.colour="red") +
  ggtitle("차종과 생산지 별 박스 그래프 : facet_grid()") +
  facet_grid(Origin ~ Type)                  # Type을 첫째 기준, Origin을 둘째 기준으로 지정합니다.
차종별 생산지별 박스 그래프 : facet_grid()

Figure 11.52: 차종별 생산지별 박스 그래프 : facet_grid()

11.3.12.3 facet_wrap() 함수의 이용

# 두 기준/그룹별 박스 그래프 그리기 : facet_wrap() 함수의 이용
ggplot(Cars93, 
       aes(x = Type,                         # Type 변수를 X로 지정합니다.
           y = Price, 
           colour = Origin)) +               # Orgin 변수를 colour(테두리 선)의 값으로 지정합니다.
  geom_boxplot(width=0.8, outlier.size=3, outlier.shape=16, outlier.colour="red") +
  ggtitle("차종과 생산지 별 박스 그래프 : facet_wrap()") +
  facet_wrap(Origin ~ Type, ncol = 6)        # Type을 첫째 기준, Origin을 둘째 기준으로 지정합니다.
차종별 생산지별 박스 그래프 : facet_wrap()

Figure 11.53: 차종별 생산지별 박스 그래프 : facet_wrap()

Go Top

11.3.13 Theme의 사용

히스토그램과 커널 밀도 곡선에서 Theme을 사용하였듯이, 박스 그래프에서도 Theme을 사용할 수 있습니다.

앞의 예에서 박스 그래프에 평균을 추가한 그래프에 Theme을 사용해 보겠습니다.

이 예에서도 히스토그램에서 Theme으로 사용ggplot2::theme_classic() + 이하 부분을 복사해서 붙여 넣기한 것입니다.

# 박스 그래프에 평균 추가하기 + Theme의 사용
ggplot(Cars93, aes(x = Type, y = Price)) + 
       geom_boxplot(width = 0.8, outlier.size = 3, outlier.shape = 16, outlier.colour = "red") +
       stat_summary(fun.y = "mean",                # Y축의 평균값을 산출합니다
                    geom = "point",                # 점으로 표시합니다.
                    shape = 8,                     # 점의 모양을 8로 지정합니다.
                    size = 3,                      # 점의 크기를 지정합니다.
                    colour = "blue") +             # 점의 색을 지정합니다.
       ggtitle(" 박스 그래프에 평균 추가하기") +
  
  ggplot2::theme_classic() +                                         # 그래프 테마 지정
  ggplot2::theme(axis.title.x = element_text(size  = 10, 
                                             face  = "italic", 
                                             color = "gray", 
                                             angle = 0, 
                                             vjust = 0.5),
                 axis.title.y = element_text(size  = 10, 
                                             face  = "bold.italic", 
                                             color = "gray", 
                                             angle = 0, 
                                             vjust = 0.5)) +       # X축과 Y축의 서식 스타일 지정
  ggplot2::scale_y_continuous(labels = scales::comma)              # Y 값의 천단위에 콤마 표시
## Warning: `fun.y` is deprecated. Use `fun` instead.
박스 그래프 : Theme 적용하기

Figure 11.54: 박스 그래프 : Theme 적용하기

Go Top

연습문제

1. Cars93 데이터 세트에 있는 연속형 변수를 박스 그래프로 시각화 하려 합니다.

1-1. MPG.highway 변수에 대한 기본 박스 그래프를 작성하시오.
ggplot(Cars93, aes(x = 1, 
                   y= MPG.highway)) +
    geom_boxplot() +
    ggtitle("기본 박스 그래프 : MPG.highway")

##### 1-2. 기본 박스 그래프를 수평으로 표시하시오.

ggplot(Cars93, aes(x = 1, 
                   y= MPG.highway)) +
    geom_boxplot() +
    coord_flip() + 
    ggtitle("수평 기본 박스 그래프 : MPG.highway")

11.3.13.0.1 1-3. 기본 박스 그래프를 V자 모양의 노치 박스 그래프로 표시하시오.
ggplot(Cars93, aes(x = 1, 
                   y= MPG.highway)) +
    geom_boxplot(notch = TRUE) +
    ggtitle("노치 박스 그래프 : MPG.highway")

1-4. MPG.highway 변수에 대한 기본 박스 그래프에서 1) x축 이름과 구분자를 없애고, 2) 이상값(outliers)들을 13번 모양으로, 크기 3의 “blue” 색으로 표시하시오.
ggplot(Cars93, aes(x = 1, 
                   y= MPG.highway)) +
    geom_boxplot(outlier.shape = 13,
                 outlier.size = 3,
                 outlier.colour = "blue") +
    scale_x_continuous(breaks = NULL) +                  
    theme(axis.title.x = element_blank()) +    
    ggtitle("MPG.highway 박스 그래프 : 이상값 표시")

11.3.13.0.2 1-5. 1-4.에서 작성한 박스 그래프에 데이터를 점들(shape = 16)로 표시하고, position = position_jitter(width = 0.1, height = 0.1)geom_jitter() 함수의 모수로 입력하시오.
ggplot(Cars93, aes(x = 1, 
                   y= MPG.highway)) +
    geom_boxplot(outlier.shape = 13,
                 outlier.size = 3,
                 outlier.colour = "blue") +
    scale_x_continuous(breaks = NULL) +                  
    theme(axis.title.x = element_blank()) +    
    geom_jitter(shape = 16,
                position = position_jitter(width = 0.1, height = 0.1)) + 
    ggtitle("MPG.highway 박스 그래프 : 이상값 표시")

11.3.13.0.3 1-6. 기본 박스 그래프의 테두리 색을 “blue,” 채우기 색을 투명도 0.5의 “yellow”로 지정하시오.
ggplot(Cars93, aes(x = 1, 
                   y= MPG.highway)) +
    geom_boxplot(colour = "blue",
                 fill = "yellow",
                 alpha = 0.5) +
    ggtitle("MPG.highway 박스 그래프 : 색 지정하기")

11.3.13.0.4 1-7. 1-6.에서 작성한 박스 그래프에 MPG.highway의 평균 값을 (shape =) 8번의 점(point)으로, 크기(size =) 3, 그리고 (colour = ) “red” 색으로 표시하시오.
ggplot(Cars93, aes(x = 1, 
                   y= MPG.highway)) +
    geom_boxplot(colour = "blue",
                 fill = "yellow",
                 alpha = 0.5) +
    stat_summary(fun.y = "mean",
                 geom = "point",
                 shape = 8,
                 size = 3,
                 colour = "red") +  
    ggtitle("MPG.highway 박스 그래프 : 평균점 표시하기")
## Warning: `fun.y` is deprecated. Use `fun` instead.

2. MPG.highway 변수에 대하여 자동차 유형(Type) 변수를 그룹으로 하여 그룹별 박스 그래프를 작성하시오.

단,

  • 박스 그래프의 테두리 색은 자동차 유형(Type)별로 색을 달리하시오.
  • 그룹별 박스 그래프는 aes() 함수를 이용하시오.
ggplot(Cars93, 
       aes(x = Type,
           y = MPG.highway,
           colour = Type)) +
  geom_boxplot() +
  ggtitle("자동차 유형별 MPG.highway 박스 그래프 : aes() 함수 이용")

Go Top


  1. Part 2. 그래프 모수의 기호 모양을 참고하기 바랍니다.↩︎

  2. Part 2. 그래프 모수의 기호 모양을 참고하기 바랍니다.↩︎

  3. stat_*() 함수에 대한 설명을 참고하기 바랍니다.↩︎