10.1 막대 그래프

먼저, 범주별 도수를 구하고 이를 막대 형태로 나타낸 막대 그래프 (Bar Chart)를 ggplot2geom_bar() 로 그려보겠습니다.

10.1.1 데이터 세트

사용할 데이터는 MASS 패키지에 있는 Cars93 데이터 프레임에서 자동차 유형(Type), 제조국(Origin) 등의 범주형/요인(factor)형 변수를 사용하겠습니다.

library(tidyverse)  
library(MASS)
str(Cars93)

Go Top

10.1.2 막대 그래프 활용 방식

ggplot() 함수를 이용하여 막대 그래프를 그리는 방식에는 크게 두 가지 방식이 있습니다.

  • x축의 변수(범주형 변수)만을 지정하여 y축에 빈도를 나타내는 방식 : (일변수 범주형 그래프)
  • x축의 변수(범주형 변수)를 기준으로 y축에 다른 변수의 값(예, 합계)을 지정하여 그리는 방식 (Y축에 변수를 지정한 막대 그래프)

10.1.3 x축을 범주형 변수로 한 기본 막대 그래프

Cars93 데이터 세트에서 그동안 실습해 왔던 범주형 변수인 자동차 유형(Type) 변수를 X축의 범주형 변수로 설정하여 막대 그래프를 그리는 경우가 해당됩니다.

aes(x, y) 함수의 x변수로 Type을 지정해 주면 됩니다. 이때 Y축을 지정해 주지 않아도 ggplot() 함수는 X축에 지정되어 있는 변수 값들의 빈도(count)를 y축에 자동으로 표시해 줍니다.

그런데 Y축에 빈도를 표시하기 위해 geom_bar() 함수 안에 stat = "count" 라는 모수가 기본 값으로 설정되어 있기 때문입니다. 그리고 이때 계산된 빈도수는 ..count.. 라는 변수에 저장이 되게 됩니다. 즉, aes(y = ..count..)를 기본 값으로 한다는 것입니다.3

아래 예제에서는 자동차 유형(Type)별로 빈도수를 나타내는 막대 그래프는 다음과 같이 작성됩니다.

# 자동차 유형별 막대 그래프 : 

ggplot(Cars93, 
       aes(x = Type, 
           y = ..count..)) +            # y = ..count..는 생략가능
    geom_bar(stat = "count") +        # stat = "count"는 생략가능
    ggtitle("차량 유형별 기본 막대 그래프")
차량 유형별 기본 막대 그래프

Figure 10.1: 차량 유형별 기본 막대 그래프

Go Top

10.1.3.1 수평 막대 그래프

coord_flip() 함수를 하나의 레이어로 추가하여 막대 그래프를 수평으로 그릴 수 있습니다.

# 자동차 유형별 막대 그래프 : 

ggplot(Cars93, 
       aes(x = Type, 
           y = ..count..)) +
    geom_bar(stat = "count") +  
    coord_flip() + 
    ggtitle("수평 막대 그래프")
수평 막대 그래프

Figure 10.2: 수평 막대 그래프

Go Top

10.1.3.2 막대 그래프의 색 지정

aes() 함수 안에 막대의 색과 관련한 모수를 입력하여 막대의 색을 지정할 수 있습니다.

예를 들어, fill = 모수는 막대의 채우기 색을 지정하고, colour =는 막대의 테두리 색을, 그리고 alpha =는 채우기 색의 상대적 투명도를 지정해 줍니다. 다음의 예를 통해 확인해 보겠습니다.

# aes() 함수를 이용한 색 지정
ggplot(Cars93, 
       aes(x = Type)) +        
    geom_bar() +
    aes(colour = Type) +       # 테두리 색 지정
    aes(fill = Type) +         # 채우기 색 지정
    aes(alpha = ..count..) +   # 채우기 색의 투명도
    ggtitle("차량 유형별 막대 그래프 : aes()함수를 이용한 색 지정")
차량 유형별 막대 그래프 : aes()함수를 이용한 색 지정

Figure 10.3: 차량 유형별 막대 그래프 : aes()함수를 이용한 색 지정

Go Top

10.1.4 상대 비율 막대 그래프

막대 그래프의 Y축을 상대 비율로 표시할 수 있습니다. 이를 위해서는 aes() 함수 내에 y = ..prop.. 모수와 group = 1을 추가해 줍니다.

또한, y축을 % 형식으로 출력하기 위해 scale_y_continuous(labels = scales::percent_format()) 함수를 추가해 주었습니다.

# 자동차 유형별 막대 그래프 : 

ggplot(Cars93, 
       aes(x = Type,
           y = ..prop..,
           group = 1)) +            # y = ..count..는 생략가능
    geom_bar() +        # stat = "count"는 생략가능
    ggtitle("상대 비율 막대 그래프") +
    scale_y_continuous(labels = scales::percent_format()) 
상대 비율 막대 그래프

Figure 10.4: 상대 비율 막대 그래프

Go Top

10.1.5 Y축에 변수를 지정한 막대 그래프

자동차 유형(Type) 별로 고속도로 연비(MPG.highway)를 막대 그래프로 그려 보겠습니다.

aes() 함수의 X축으로 범주형 변수인 Type 변수를 그리고 Y축의 변수로는 연속형 변수인 MPG.highway 변수를 지정해 줍니다.

그런데, 이때 막대 그래프를 그리기 위해서는 geom_bar() 함수를 이용할 수도 있고, geom_col() 함수를 사용할 수도 있습니다.

10.1.5.1 geom_bar() 함수의 이용

먼저 geom_bar() 함수를 이용하여 막대 그래프를 그려 보겠습니다.

geom_bar() 함수 안에 반드시 stat = "identity"를 입력해 주어야 합니다. 이는 X축의 Type 변수의 데이터를 기준으로 Y축에 있는 MPG.highway높이(합계)가 결정된다는 것을 지정해 주는 것입니다.

ggplot(Cars93,
       aes(x = Type,
           y = MPG.highway)) +
  geom_bar(stat = "identity")
그룹별 막대 그래프 : geom_bar()함수 이용

Figure 10.5: 그룹별 막대 그래프 : geom_bar()함수 이용

Go Top

10.1.5.2 geom_col() 함수의 이용

이제는 geom_col() 함수를 이용하여 막대 그래프를 그려 보겠습니다. geom_col() 함수의 경우에는 stat = “identity”를 기본값으로 하고 있기 때문에 이를 굳이 입력해 줄 필요가 없습니다.

ggplot(Cars93,
       aes(x = Type,
           y = MPG.highway)) +
  geom_col()
그룹별 막대 그래프 : geom_col()함수 이용

Figure 10.6: 그룹별 막대 그래프 : geom_col()함수 이용

geom_bar() 함수는 x축의 각 수준별 도수를 계산하기 위하여 stat_count() 함수를 이용합니다. 반면에 geom_col() 함수는 x축의 각 수준별 을 플롯하기 위해 stat_identity() 함수를 사용합니다.

지금까지 X축을 차량의 유형(Type)으로 하고, Y축을 고속도로 연비(MPG.highway)로 하여 막대 그래프를 그려 보았습니다. 그러면 실제로 막대 그래프의 높이는 무엇을 나타내는 것일까요? Y축은 각 Type의 수준별 MPG.highway의 합계를 나타내고 있는 것입니다.

즉, Y축은 다음과 같이 구해지는 값을 나타내고 있습니다.

Cars93_sum <- Cars93 %>%
                  group_by(Type) %>%
                     summarise(sum_MPG.h = sum(MPG.highway))
Cars93_sum
## # A tibble: 6 x 2
##   Type    sum_MPG.h
##   <fct>       <int>
## 1 Compact       478
## 2 Large         294
## 3 Midsize       588
## 4 Small         745
## 5 Sporty        403
## 6 Van           197

그러면 Y축에 합계가 아닌 평균을 나타내고 싶을 때는 어떻게 하면 될까요? 다음에서 살펴 보도록 하겠습니다.

Go Top

10.1.5.3 Y축에 평균을 표시하기

앞에서 살펴본 자동차 유형(Type)별로 고속도로 연비(MPG.highway)의 합계를 구하는 방법을 그대로 이용하여, 평균 고속도로 연비(mean_MPG.h)를 다음과 같이 구하여, Cars93_sub라는 데이터 프레임을 생성합니다.

그런 다음, aes() 함수를 이용하여, X축에 Type을 그리고 Y축에 mean_MPG.h를 지정해 주고 geom_col() 함수로 막대 그래프를 그려 주면 됩니다.

## Type 별로 MPG.highway의 평균을 구하여 데이터 프레임을 생성합니다.
Cars93_sub <- Cars93 %>%
                  group_by(Type) %>%
                     summarise(mean_MPG.h = mean(MPG.highway))
Cars93_sub %>% 
  ggplot() +
  aes(x = Type) +
  aes(y = mean_MPG.h) +
  geom_col() +
ggtitle("차량 유형별 평균 고속도로 연비")
차량 유형별 '평균' 고속도로 연비

Figure 10.7: 차량 유형별 ‘평균’ 고속도로 연비

Go Top

10.1.6 막대 그래프에 데이터 레이블 달기

막대 그래프의 각 막대 마다 데이터 레이블을 표시할 수 있습니다. 이를 위해서는 geom_text() 함수를 이용합니다. 앞에서 작성한 그림 10.1 에 데이터 레이블을 추가해 보겠습니다.

데이터 레이블은 geom_text() 함수를 이용하여 표시할 수 있는데, 다음의 모두를 이용하게 됩니다.

  • stat : geom_bar() 함수는 기본적인 통계 변환 함수(stat =)은 count를 사용합니다.
  • aes(label = : 그리고 Y축에 표시되는 값은 ..count.. 변수에 저장되어 있습니다.
  • aes(vjust = :데이터 레이블이 표시될 위치를 지정해 줍니다.

즉, geom_text(stat = "count", aes(label = ..count..), vjust = -0.5) 를 추가해 줍니다.

# 자동차 유형별 막대 그래프 : 

ggplot(Cars93, 
       aes(x = Type)) +            # y = ..count..는 생략가능
    geom_bar() +        # stat = "count"는 생략가능
    ggtitle("기본 막대 그래프 : 데이터 레이블 달기") +
  geom_text(stat = "count", 
            aes(label = ..count..), vjust = -0.5)
기본 막대 그래프 : 데이터 레이블 달기

Figure 10.8: 기본 막대 그래프 : 데이터 레이블 달기

상대 비율 막대 그래프인 그림 10.4에 대해서도 데이터 레이블을 표시해 보겠습니다.

geom_text() 함수 내의 aes(label = )에 상대 비율을 나타내는 변수 ..prop..를 입력해 줍니다. 그런데 이 때 ..prop..의 값을 소숫점 이하 1자리로 표시하고 끝에 % 기호를 추가 시키기 위해 round() 함수와 paste0() 함수를 이용하였습니다.

# 자동차 유형별 막대 그래프 : 

ggplot(Cars93, 
       aes(x = Type,
           y = ..prop..,
           group = 1)) +            # y = ..count..는 생략가능
    geom_bar() +        # stat = "count"는 생략가능
    ggtitle("상대 비율 막대 그래프 : 데이터 레이블 표시하기") +
    scale_y_continuous(labels = scales::percent_format()) +
    geom_text(stat = "count",
              aes(label = paste0(round(..prop.., 3)*100, " %")),
              vjust = 1.5)
상대 비율 막대 그래프 : 데이터 레이블 표시하기

Figure 10.9: 상대 비율 막대 그래프 : 데이터 레이블 표시하기

Go Top

10.1.7 그룹별 막대 그래프

다음의 예는 차종(Type)별, 제조국(Origin) 별 자동차 수를 가지고 막대 그래프를 그려보도록 하겠습니다.

이 경우 히스토그램에서 그룹별 히스토그램에서 살펴본 바와 같이 aes() 함수에 모수를 지정하는 방법과, facet_grid() 함수를 이용하는 방법 그리고 facet_wrap() 함수를 이용하는 방법으로 살펴 볼 수 있습니다.

10.1.7.1 aes() 함수의 모수 이용

이 경우도 그룹별 히스토그램에서 살펴본 바와 같이 fill, group, colour 등의 모수를 이용할 수 있습니다. 여기서는 fill 을 예로 설명하겠습니다.

  • aes() 함수 내에 막대의 채우기 색을 특정 색이 아닌 ‘fill = Origin’ 로 지정해 주면 각 막대의 색을 원산지별로 구분해서 표시해 줍니다.
  • 또한 geom_bar() 함수 내에 position = "dodge"를 입력해 주면, 막대가 원산지별로 수평으로 분리되어 표시가 됩니다.
  • colour = 모수의 경우 테두리 색을 지정하는데 있어서 이 모수를 aes() 함수내에 입력할 수도 있고, geom_bar() 함수 안에도 입력할 수 있습니다. 그런데 colour = Originaes() 함수 내에만 입력할 수 있습니다.

geom_bar() 함수 안에 position = "dodge"를 입력한 수평 막대 그래프는 다음과 같습니다.

# 차종별 원산지별 도수 분포도 : 이변량 막대 그래프
ggplot(Cars93, 
       aes(x = Type,                        
           fill = Origin)) +             # 막대 채우기 색을 Origin 별로 지정합니다.
       geom_bar(position = "dodge",      # 막대를 Origin 별로 수평 배열합니다.(기본 값은 "stack")
                colour = "black") +      # 막대의 테두리 선을 지정합니다.
       scale_fill_brewer(palette = 1) +  # 막대의 컬러 팔레트를 1로 지정합니다.
       ggtitle("차종별 원산지별 막대 그래프 : 이변량 막대 그래프")
차종별 원산지별 막대 그래프 : 이변량 수평 막대 그래프

Figure 10.10: 차종별 원산지별 막대 그래프 : 이변량 수평 막대 그래프

그룹별 막대 그래프인 그림 10.10에 데이터 레이블을 표시해 보겠습니다.

여기서도 geom_text() 함수를 이용하게 되는데, 다음의 예에서 보듯이, position = position_dodge() 모수를 입력해 줍니다.

# 차종별 원산지별 도수 분포도 : 이변량 막대 그래프
ggplot(Cars93, 
       aes(x = Type,                        
           fill = Origin)) +             # 막대 채우기 색을 Origin 별로 지정합니다.
       geom_bar(position = "dodge",      # 막대를 Origin 별로 수평 배열합니다.(기본 값은 "stack")
                colour = "black") +      # 막대의 테두리 선을 지정합니다.
       scale_fill_brewer(palette = 1) +  # 막대의 컬러 팔레트를 1로 지정합니다.
       ggtitle("차종별 원산지별 막대 그래프 : 이변량 막대 그래프") +
  geom_text(stat = "count",
            aes(label = ..count..),
            position = position_dodge(width = 0.9),
            vjust = 1.5)
차종별 원산지별 막대 그래프 : 이변량 수평 막대 그래프

Figure 10.11: 차종별 원산지별 막대 그래프 : 이변량 수평 막대 그래프

geom_bar() 함수 안에 position = "stack"은 기본 값으로 특별히 입력하지 않으면 누적 막대 그래프가 작성됩니다.

# 차종별 원산지별 도수 분포도 : 이변량 누적 막대 그래프
ggplot(Cars93, 
       aes(x = Type,                        
           fill = Origin)) +                      
       geom_bar( # position = "stack",   # 기본값은 "stack", 생략 가능합니다.
                colour = "black") +                 
       scale_fill_brewer(palette = 2) +
       ggtitle("차종별 원산지별 도수 분포도 : 이변량 누적 막대 그래프")
차종별 원산지별 막대 그래프 : 이변량 누적 막대 그래프

Figure 10.12: 차종별 원산지별 막대 그래프 : 이변량 누적 막대 그래프

그룹별 막대 그래프인 그림 10.12에 데이터 레이블을 표시해 보겠습니다.

여기서도 geom_text() 함수를 이용하게 되는데, 다음의 예에서 보듯이, position = position_stack() 모수를 입력해 줍니다.

# 차종별 원산지별 도수 분포도 : 이변량 누적 막대 그래프
ggplot(Cars93, 
       aes(x = Type,                        
           fill = Origin)) +                      
       geom_bar(color = "black") +                 
       scale_fill_brewer(palette = 2) +
       ggtitle("이변량 누적 막대 그래프 : 데이터 레이블 표시") +
  geom_text(stat = "count",
            aes(label = ..count..), 
                position = position_stack(),
                vjust = 1.5)
이변량 누적 막대 그래프 : 데이터 레이블 표시

Figure 10.13: 이변량 누적 막대 그래프 : 데이터 레이블 표시

Go Top

10.1.7.2 facet_grid() 함수 이용

자동차 유형별(Type)로 앞의 히스토그램을 비교하기 위해서는 facet_grid(Type ~ .) 또는 facet_grid(vars(Type))으로 지정하는 방법과 facet_grid( . ~ Type) 으로 지정하는 방법을 각각 살펴 보겠습니다.

# 차종별 원산지별 도수 분포도 : facet_grid()
ggplot(Cars93, 
       aes(x = Type,                        
           fill = Origin)) +                      
  geom_bar(position = "identity",               
           colour = "black") +                 
  scale_fill_brewer(palette = 2) +
  ggtitle("차종별 원산지별 도수 분포도 : facet_grid()") +
  facet_grid(Origin ~ Type)                    # Origin 별로 별도의 막대 그래프를 작성합니다.
차종별 원산지별 도수 분포도 : facet_grid()

Figure 10.14: 차종별 원산지별 도수 분포도 : facet_grid()

Go Top

10.1.7.3 facet_wrap() 함수 이용

한편, facet_wrap() 함수를 이용하여 각 자동차 유형(Type)별 히스트로그램을 작성할 수도 있습니다. facet_wrap(Origin ~ Type, ncol = 2)를 추가해 보겠습니다.

# 차종별 원산지별 도수 분포도 : facet_wrap()
ggplot(Cars93, 
       aes(x = Type,                        
           fill = Origin)) +                      
  geom_bar(position = "identity",               
           colour = "black") +                 
  scale_fill_brewer(palette = 2) +
  ggtitle("차종별 원산지별 도수 분포도 : facet_wrap()") +
  facet_wrap(Origin ~ Type, ncol = 6)
차종별 원산지별 도수 분포도 : facet_wrap()

Figure 10.15: 차종별 원산지별 도수 분포도 : facet_wrap()

Go Top

10.1.8 Theme의 사용

히스토그램에서 Theme을 사용하였듯이, 막대 그래프에서도 Theme을 사용할 수 있습니다.

다음의 예는 앞서 작성한 [기본 막대 그래프]에 히스토그램에서 Theme으로 사용ggplot2::theme_classic() + 이하 부분을 복사해서 붙여 넣기한 것입니다.

# 기본 막대 그래프에 theme_classic() 적용
ggplot(Cars93, aes(x = Type)) + 
    geom_bar(fill="white",      
             colour="black") +  
  ggtitle("막대 그래프에 Theme 적용") +
  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)) +       
  ggplot2::scale_y_continuous(labels = scales::comma)              
막대 그래프에 Theme 적용

Figure 10.16: 막대 그래프에 Theme 적용

Go Top

연습문제

1. Cars93의 범주형 변수 확인하기

1-1. Cars93 데이터 세트에 있는 범주형 변수(factor)들을 확인하시오.
l <- sapply(Cars93, is.factor)  # Cars93 데이터 세트의 각 컬럼에 대하여 factor 형인지 확인
l                               # 각 컬럼이 factor 형이면 TRUE, 아니면 FALSE
##       Manufacturer              Model               Type          Min.Price 
##               TRUE               TRUE               TRUE              FALSE 
##              Price          Max.Price           MPG.city        MPG.highway 
##              FALSE              FALSE              FALSE              FALSE 
##            AirBags         DriveTrain          Cylinders         EngineSize 
##               TRUE               TRUE               TRUE              FALSE 
##         Horsepower                RPM       Rev.per.mile    Man.trans.avail 
##              FALSE              FALSE              FALSE               TRUE 
## Fuel.tank.capacity         Passengers             Length          Wheelbase 
##              FALSE              FALSE              FALSE              FALSE 
##              Width        Turn.circle     Rear.seat.room       Luggage.room 
##              FALSE              FALSE              FALSE              FALSE 
##             Weight             Origin               Make 
##              FALSE               TRUE               TRUE
n <- names(Cars93)[l]           # Cars93 데이터 세트 중 factor 형인 컬럼의 이름 출력
n
## [1] "Manufacturer"    "Model"           "Type"            "AirBags"        
## [5] "DriveTrain"      "Cylinders"       "Man.trans.avail" "Origin"         
## [9] "Make"
Cars.fac <- Cars93[n]         # Cars93 데이터 세트 중 factor 형 컬럼만 출력
str(Cars.fac)
## 'data.frame':    93 obs. of  9 variables:
##  $ Manufacturer   : Factor w/ 32 levels "Acura","Audi",..: 1 1 2 2 3 4 4 4 4 5 ...
##  $ Model          : Factor w/ 93 levels "100","190E","240",..: 49 56 9 1 6 24 54 74 73 35 ...
##  $ Type           : Factor w/ 6 levels "Compact","Large",..: 4 3 1 3 3 3 2 2 3 2 ...
##  $ AirBags        : Factor w/ 3 levels "Driver & Passenger",..: 3 1 2 1 2 2 2 2 2 2 ...
##  $ DriveTrain     : Factor w/ 3 levels "4WD","Front",..: 2 2 2 2 3 2 2 3 2 2 ...
##  $ Cylinders      : Factor w/ 6 levels "3","4","5","6",..: 2 4 4 4 2 2 4 4 4 5 ...
##  $ Man.trans.avail: Factor w/ 2 levels "No","Yes": 2 2 2 2 2 1 1 1 1 1 ...
##  $ Origin         : Factor w/ 2 levels "USA","non-USA": 2 2 2 2 2 1 1 1 1 1 ...
##  $ Make           : Factor w/ 93 levels "Acura Integra",..: 1 2 4 3 5 6 7 9 8 10 ...
1-2. Cars93 데이터 세트에 있는 범주형 변수(factor)들 중 수준(levels)이 6 이하인 변수를 확인하시오.
## Cars.fac 데이터 세트의 각 컬럼별 수준의 갯수 확인
nlvl <- sapply(Cars.fac, nlevels)
nlvl
##    Manufacturer           Model            Type         AirBags      DriveTrain 
##              32              93               6               3               3 
##       Cylinders Man.trans.avail          Origin            Make 
##               6               2               2              93
## 각 컬럼의 레블의 갯수가 6개 이하인 컬럼 선택
Cars93_nlvl <- nlvl[nlvl <= 6]
Cars93_nlvl
##            Type         AirBags      DriveTrain       Cylinders Man.trans.avail 
##               6               3               3               6               2 
##          Origin 
##               2
## Cars93 데이터 세트 중 레블의 갯수가 6이하인 factor 형 컬럼 선택
Cars93_fac <- Cars93[Cars93_nlvl]
Cars93_fac
##    Max.Price    Type  Type.1 Max.Price.1          Model        Model.1
## 1       18.8   Small   Small        18.8        Integra        Integra
## 2       38.7 Midsize Midsize        38.7         Legend         Legend
## 3       32.3 Compact Compact        32.3             90             90
## 4       44.6 Midsize Midsize        44.6            100            100
## 5       36.2 Midsize Midsize        36.2           535i           535i
## 6       17.3 Midsize Midsize        17.3        Century        Century
## 7       21.7   Large   Large        21.7        LeSabre        LeSabre
## 8       24.9   Large   Large        24.9     Roadmaster     Roadmaster
## 9       26.3 Midsize Midsize        26.3        Riviera        Riviera
## 10      36.3   Large   Large        36.3        DeVille        DeVille
## 11      42.7 Midsize Midsize        42.7        Seville        Seville
## 12      18.3 Compact Compact        18.3       Cavalier       Cavalier
## 13      11.4 Compact Compact        11.4        Corsica        Corsica
## 14      16.8  Sporty  Sporty        16.8         Camaro         Camaro
## 15      18.4 Midsize Midsize        18.4         Lumina         Lumina
## 16      18.0     Van     Van        18.0     Lumina_APV     Lumina_APV
## 17      18.6     Van     Van        18.6          Astro          Astro
## 18      19.6   Large   Large        19.6        Caprice        Caprice
## 19      41.5  Sporty  Sporty        41.5       Corvette       Corvette
## 20      18.4   Large   Large        18.4       Concorde       Concorde
## 21      17.1 Compact Compact        17.1        LeBaron        LeBaron
## 22      29.5   Large   Large        29.5       Imperial       Imperial
## 23      10.6   Small   Small        10.6           Colt           Colt
## 24      14.2   Small   Small        14.2         Shadow         Shadow
## 25      14.7 Compact Compact        14.7         Spirit         Spirit
## 26      24.4     Van     Van        24.4        Caravan        Caravan
## 27      16.4 Midsize Midsize        16.4        Dynasty        Dynasty
## 28      33.1  Sporty  Sporty        33.1        Stealth        Stealth
## 29      16.5   Small   Small        16.5         Summit         Summit
## 30      21.2   Large   Large        21.2         Vision         Vision
## 31       7.9   Small   Small         7.9        Festiva        Festiva
## 32      11.9   Small   Small        11.9         Escort         Escort
## 33      12.2 Compact Compact        12.2          Tempo          Tempo
## 34      21.0  Sporty  Sporty        21.0        Mustang        Mustang
## 35      15.2  Sporty  Sporty        15.2          Probe          Probe
## 36      25.3     Van     Van        25.3       Aerostar       Aerostar
## 37      24.8 Midsize Midsize        24.8         Taurus         Taurus
## 38      21.7   Large   Large        21.7 Crown_Victoria Crown_Victoria
## 39      10.0   Small   Small        10.0          Metro          Metro
## 40      13.5  Sporty  Sporty        13.5          Storm          Storm
## 41      22.7  Sporty  Sporty        22.7        Prelude        Prelude
## 42      15.8   Small   Small        15.8          Civic          Civic
## 43      21.2 Compact Compact        21.2         Accord         Accord
## 44       9.2   Small   Small         9.2          Excel          Excel
## 45      11.0   Small   Small        11.0        Elantra        Elantra
## 46      11.0  Sporty  Sporty        11.0         Scoupe         Scoupe
## 47      15.3 Midsize Midsize        15.3         Sonata         Sonata
## 48      50.4 Midsize Midsize        50.4            Q45            Q45
## 49      28.4 Midsize Midsize        28.4          ES300          ES300
## 50      35.6 Midsize Midsize        35.6          SC300          SC300
## 51      35.3 Midsize Midsize        35.3    Continental    Continental
## 52      37.8   Large   Large        37.8       Town_Car       Town_Car
## 53       9.1   Small   Small         9.1            323            323
## 54      12.3   Small   Small        12.3        Protege        Protege
## 55      18.7 Compact Compact        18.7            626            626
## 56      21.7     Van     Van        21.7            MPV            MPV
## 57      32.5  Sporty  Sporty        32.5           RX-7           RX-7
## 58      34.9 Compact Compact        34.9           190E           190E
## 59      80.0 Midsize Midsize        80.0           300E           300E
## 60      15.0  Sporty  Sporty        15.0          Capri          Capri
## 61      14.9 Midsize Midsize        14.9         Cougar         Cougar
## 62      12.9   Small   Small        12.9         Mirage         Mirage
## 63      29.9 Midsize Midsize        29.9       Diamante       Diamante
## 64      14.9   Small   Small        14.9         Sentra         Sentra
## 65      18.3 Compact Compact        18.3         Altima         Altima
## 66      21.5     Van     Van        21.5          Quest          Quest
## 67      22.0 Midsize Midsize        22.0         Maxima         Maxima
## 68      14.0 Compact Compact        14.0        Achieva        Achieva
## 69      18.4 Midsize Midsize        18.4  Cutlass_Ciera  Cutlass_Ciera
## 70      19.5     Van     Van        19.5     Silhouette     Silhouette
## 71      21.9   Large   Large        21.9   Eighty-Eight   Eighty-Eight
## 72      17.4  Sporty  Sporty        17.4          Laser          Laser
## 73       9.9   Small   Small         9.9         LeMans         LeMans
## 74      12.8 Compact Compact        12.8        Sunbird        Sunbird
## 75      21.4  Sporty  Sporty        21.4       Firebird       Firebird
## 76      21.6 Midsize Midsize        21.6     Grand_Prix     Grand_Prix
## 77      29.4   Large   Large        29.4     Bonneville     Bonneville
## 78      37.1 Compact Compact        37.1            900            900
## 79      12.9   Small   Small        12.9             SL             SL
## 80       9.5   Small   Small         9.5          Justy          Justy
## 81      11.3   Small   Small        11.3         Loyale         Loyale
## 82      22.7 Compact Compact        22.7         Legacy         Legacy
## 83      10.0   Small   Small        10.0          Swift          Swift
## 84      11.8   Small   Small        11.8         Tercel         Tercel
## 85      22.6  Sporty  Sporty        22.6         Celica         Celica
## 86      21.2 Midsize Midsize        21.2          Camry          Camry
## 87      26.6     Van     Van        26.6         Previa         Previa
## 88       9.5   Small   Small         9.5            Fox            Fox
## 89      22.7     Van     Van        22.7        Eurovan        Eurovan
## 90      22.4 Compact Compact        22.4         Passat         Passat
## 91      23.7  Sporty  Sporty        23.7        Corrado        Corrado
## 92      23.5 Compact Compact        23.5            240            240
## 93      28.5 Midsize Midsize        28.5            850            850

2. Cars93 데이터 세트 중 일부 변수를 막대 그래프로 시각화 하려 합니다.

2-1. 범주형 변수 중 AirBags에 대한 기본 막대 그래프를 작성하시오.
ggplot(Cars93, aes(x = AirBags)) +
  geom_bar() +
  ggtitle("기본 막대 그래프 : AirBags")

2-2. AirBags의 기본 막대 그래프를 수평으로 작성하시오.
ggplot(Cars93, aes(x = AirBags)) +
  geom_bar() +
  coord_flip() +
  ggtitle("기본 막대 그래프 : AirBags")

2-3. AirBags의 기본 막대 그래프에서 각 막대의 채우기(fill =) 색을 AirBags 변수로 지정하시오.
ggplot(Cars93, aes(x = AirBags,
                   fill = AirBags)) +
  geom_bar() +
  ggtitle("기본 막대 그래프 : AirBags")

2-4. AirBags 변수에 대한 상대 비율 막대 그래프를 작성하시오.
ggplot(Cars93, aes(x = AirBags,
                   y = ..prop..,
                   group = 1)) +
  geom_bar() +
  ggtitle("AirBags의 상대 비율 막대 그래프") +
    scale_y_continuous(labels = scales::percent_format()) 

3. Man.trans.avail 변수에 대하여 Y축에 MPG.city(도시주행 연비)의 평균을 막대 그래프로 작성하시오. 단, 각 막대의 채우기 색은 각 범주형 변수로 지정합니다.

Cars93_Mta <- Cars93 %>%
                  group_by(Man.trans.avail) %>%
                     summarise(mean_MPG.c = mean(MPG.city))

ggplot(Cars93_Mta, aes(x = Man.trans.avail,
                   y = mean_MPG.c,
                   fill = Man.trans.avail)) +
  geom_col() +
  ggtitle("Man.trans.avail 유형별 도시주행 연비")

4. AirBags 변수에 대하여 자동차 유형(Type) 변수를 그룹으로 하여 그룹별 막대 그래프를 작성하시오. 단, aes() 함수를 이용하시오.

ggplot(Cars93, 
       aes(x = AirBags,                        
           fill = Type)) +             # 막대 채우기 색을 Origin 별로 지정합니다.
       geom_bar(position = "dodge",      # 막대를 Origin 별로 수평 배열합니다.(기본 값은 "stack")
                colour = "black") +      # 막대의 테두리 선을 지정합니다.
       scale_fill_brewer(palette = 1) +  # 막대의 컬러 팔레트를 1로 지정합니다.
       ggtitle("AirBags별 자동차 유형 막대 그래프 : 이변량 막대 그래프")

Go Top


  1. stat_*() 함수의 사용을 참고하기 바랍니다.↩︎