클리브랜드 점 그래프 그리기

목표

이번 장에서는 클리브랜드 점 그래프(Cleveland Dot Plot)를 그리는 방법을 배우고 데이타의 일부 선택(subset)을 위한 전처리 및 데이타의 정렬을 위한 전처리를 배워본다. 이번 장의 예제는 Winston Chang의 R graphics cookbook 및 패키지 gcookbook에 있는 내용에서 가져온 것이다.

2-7-0.png

웹-R의 방법

step 1: 데이타 입력하기

이번 장에서는 gcookbook패키지에 있는 tophitters2001 데이타를 사용한다. tophitters2001 데이타는 2001년 미국 프로야구 메이져리그 상위 타자 144명의 기록을 갖고 있다. 이번 장에서는 상위 25명의 자료만 사용하므로 데이타 Preprocessing하기 부분에 다음과 같이 입력한 후 체크박스를 선택한다(1).

# tophitters2001데이타 중 처음 1행부터 25행까지의 데이타만 tophit에 저장
tophit=tophitters2001[1:25,]  

사용할 데이타를 입력하세요 부분에 tophit를 입력한다(2). 잘 입력한 경우 표가 나타난다.

tophit

2-7-13.png

step 2: 잘못 입력할 경우

데이타 전처리하기 부분에 잘못 입력한 경우(여기서는 tophitter2001로 s를 뺴고 입력해보았다) 에러메시지가 나온다. 당황하지 말고 다시 입력해주고 체크박스를 선택하면 된다.

2-7-14.png 2-7-15.png

step 3: 변수의 할당 및 점 그래프 그리기

x축변수에 평균타율(avg)을 선택하고(1) y축 변수에 이름을 선택한다(2). 점을 추가하기 위해 point 체크박스를 선택하고(3) 점의 크기를 키우기 위해 size에 3를 설정한다(4).

2-7-5.png

step 4: segment의 추가

선분그래프를 추가하기 위해 segment체크박스를 선택하고(1) yend변수에 “name”을 입력한다(2).

2-7-16.png

step 5: 이름을 평균타율 순으로 정렬하기

타자 이름을 평균타율 순으로 정렬하려면 y=reorder(name,avg)와 같이 명령어를 입력하여야 한다. 하지만 웹R에서는 사용자의 편의를 위하여 x축변수순으로 정렬체크박스를 누르면 위와 같은 명령어로 바꾸어 준다(1). 타자의 이름에 따라 색깔을 바꾸어 주고 싶으면 color변수에 name을 선택하고(2) 범례를 없앤다(3).

2-7-6.png

step 6: 흑백테마의 적용

흑백테마를 적용하기 원할 경우 화면을 아래로 이동하여 테마 변경에서 bw를 선택한다.

2-7-7.png

step 7: 두 개의 열을 기준으로 데이타 정렬하기

미국 프로야구는 아메리칸리그와 내셔날리그의 두개 리그로 운영된다. 한 곳은 지명타자 제도가 있고 한 곳은 투수도 타격을 해야 한다. 따라서 타자들의 순위를 한꺼번에 비교하는 것보다는 리그별로 구분하여 비교하는 것이 좋다.
따라서 프로야구 타자들의 순위를 리그별로 분할하여 그리고 싶다. 그러기위해서는 타자들의 순서를 리그(lg)및 타율(avg) 순으로 정렬해야 한다. 다음의 코드는 타자들의 이름을 리그 및 타율 순으로 정렬하여 새로운 name1이라는 열로 저장해준다. 먼저 데이타 전처리하기 체크박스를 해제하고(1) 다음의 코드를 입력한 후(2) 다시 데이타 전처리하기 체크박스를 선택한다(3).

tophit=tophitters2001[1:25,]                        # 처음 25개의 행만 사용
nameorder=tophit$name[order(tophit$lg,tophit$avg)]  # 리그 및 타율순으로 정렬
tophit$name1=factor(tophit$name,levels=nameorder)   # 정렬된 이름

2-7-8.png

step 8: 분할된 점그래프 그리기

y축 변수에 전처리 과정에서 만든 name1을 할당하고(1) x축변수순 정렬 체크박스를 해제한다(2). 리그에 따라 다른 색깔로 나타내기 위해 color변수lg를 할당한다(3). 가로로 면 분할에 역시 lg를 할당한다(4).

2-7-9.png

다음과 같은 그래프가 나타난다. 면분할에 사용되는 facet_grid()함수는 디폴트 값으로 모든 면에 같은 x축, y축 변수를 나타내며 모든 면의 크기를 같게 그린다.

2-7-10.png

step 9: 면분할 옵션 조절 : scales 인수

facet_grid()함수의 인수인 scales는 디폴트 값으로 “fixed”를 가지며 이때에는 분할된 면 마다 x축 변수, y축변수가 모두 나타난다. “free_x”인 경우 x축 변수가 면에 따라 다르게 나타나며 “free_y”인 경우 y축 변수가 면에 따라 다르게 나타난다. “free”인 경우 x축변수, y축변수가 모두 면에 따라 다르게 나타난다. 이 예에서와 같이 “free_y”를 사용하면 각 면마다 포함되어 있는 y변수만 나타나지만 각 면의 크기는 같다.

2-7-11.png

step 10: 면분할 옵션 조절 : space 인수

facet_grid()함수의 또 다른 인수인 space는 디폴트 값으로 “fixed”를 가지며 모든 면이 같은 크기를 갖는다. “free_x”의 경우 폭이 달라지며 “free_y”인 경우 길이가 달라진다. “free”인 경우 폭과 길이가 모두 변동된다. 이로써 우리가 그리고자 한 그래프가 완성된다.

2-7-12.png

전통적인 R의 방법

전통적인 R 명령어를 써서 이 그래프를 그리기 위해서는 다음 명령어를 사용하면 된다.

require(gcookbook)   # 데이타 tophitters2001 사용을 위해
require(ggplot2)     # ggplot()의 사용을 위해

#  데이타 전처리
tophit=tophitters2001[1:25,]                        # 처음 25개의 행만 사용
nameorder=tophit$name[order(tophit$lg,tophit$avg)]  # 리그 및 타율순으로 정렬
tophit$name1=factor(tophit$name,levels=nameorder)   # 정렬된 이름

#  그래프 그리기
ggplot(tophit,aes(x=avg,y=name1,colour=lg))+        # 데이타 및 변수할당    
 geom_segment(aes(yend=name),xend=0,size=0.5)+      # 선분그래프    
 geom_point()+                                      # 점그래프
 facet_grid(lg ~ .,scales='free_y',space='free_y')+ # 면 분할
 theme_bw(base_family='Helvetica')+                 # 테마 선택
 theme(legend.position='none')                      # 범례 없앰