본문 바로가기

배우기/복습노트[R과 분석]

[복습] R(programming language) 시각화(2) (barplot, pie, pie3D) + 하루끝(20231211)

728x90
반응형

https://metime.tistory.com/169

 

[복습] R(programming language) 시각화(1)(선그래프) + 하루끝(20231208)

시각화에는 기본 시각화 함수와 ggplot2 패키지가 있다. 우선 기본 시각화 함수로 여러 그래프를 출력해보도록 하겠다. 1. 선 그래프(산점도): 분포를 확인하거나 x축과 y축의 상관관계를 시각화하

metime.tistory.com

 

여기에서는 선 그래프를 그리는 방법에 대하여 작성하였다.

 

오늘은 선그래프와 산점도에 대한 약간의 복습과 bar plot, pie chart에 대하여 복습하고 기타 시각화 옵션을 확인하도록 하겠다.

 

 

1. plot(선그래프, 산점도)

 

위 링크에서 대부분 했다고 보면 되어서 위 링크로 공부를 하면 되고, 여기에서는 모든 데이터 포인트(각각의 데이터)를 동시에 시각화 하는 방법과 데이터 포인트 집단끼리 각각 시각화 하는 차이점에 대하여 비교를 해보도록 하겠다.

 

 

비교해보기

산점도 예제) iris$Sepal.Length, iris$Sepal.Width 산점도에 대하여 Species별로 서로 다른 색으로 나타내어보자.

 

먼저 모든 데이터 포인트를 동시에 시각화 하는 방법이다.

 

동시에 시각화 하기 위해서는 위처럼 my_col1이나 my_pch1처럼 옵션 하나를 줄 때마다 ifelse로 옵션 설정을 factor마다 넣어줘야 한다.

 

 

그 다름 데이터 포인트 집단끼리 각각 시각화 하는 방법이다.

Line 7에 우선 iris$Sepal.Length와 Sepal.Width에 대한 plot을 그리지만 type = 'n'을 하므로써 그냥  x축, y축만 체크된 흰 도화지처럼 세팅을 하게 되고,

그 위에 points라는 함수로 데이터 포인트를 각각 그리게 되는 방법이다.

 

여기서는 위 둘의 차이를 이해하는 것이 중요하다.

 

 

 

2. barplot

막대그래프이며, 범주형 자료의 비교 시각화가 목적이다.

옵션은 아래와 같다.

 

barplot(height,                      # 막대 높이를 나타내는 벡터, 행렬도 가능(데이터프레임 안됨)

        width = 1,                     # 막대의 너비

        space = NULL,            # 막대 사이 공간

        names.arg = NULL,     # 각 막대의 이름(x축 좌표로 출력)

        beside = FALSE,         # 서로 다른 범주끼리 막대를 분리할 것인가(각 범주별 서로 다른 막대 출력 여부)

        horiz = FALSE,            # 막대의 수평 출력 여부

        legend.text = NULL,    # legend 출력 시 각 범주별 이름(비교 대상)

        args.legend = NULL,   # legend옵션(list로 전달)

        col = NULL,                 # 막대의 색

        density = NULL,          # 막대 눈금 처리(눈금의 강도, 수치를 높이면 촘촘해짐) 

        angle = 45,                  #  막대 눈금의 각도

        border - par("fg"),        # 막대 테두리 색깔

        ...)

 

예) 벡터의 막대그래프 출력

 

 

 

 

예) 데이터 프레임(2차원)의 막대 그래프 출력 ★ ★ ★

명확히 barplot은 데이터 프레임은 출력이 불가하다. matrix로 바꾸어 주어야 한다.

2차원이 가능하다는 의미는 데이터 프레임 내부에서 비교 가능한 bar plot을 그려준다는 의미이다.

 

 

데이터 프레임을 위처럼 바로 barplot 하게 되면 'height'는 반드시 벡터 또는 행렬이어야 합니다. 라는 에러가 발생한다.

그러므로 아래와 같이 matrix로 변경한 후 barplot 하여야 한다.

 

 

 

옵션 없이 바로 출력하게 되면 위처럼 각 그룹별로 하나의 막대로 표현하게 된다(stack bar plot).

 

beside = T 옵션을 주게 되면 아래와 같이 구분 가능한 bar plot이 그려지게 되고 추가 옵션들을 주어 그래프에 정보를 표시하였다.

 

 

 

 

연습문제를 풀어보자.

영화이용현황.csv 파일을 읽고 요일별 연령대(10대, 20대, 30대, ..., 60세 이상)별 영화이용현황 비교 막대그래프를 출력하여라(같은 요일 내 연령대 비교 목적)

 

 

날짜 파싱에 대하여 다시 한번 정리하자면(STEP 1)

lubridate::wday('201821', label=T)    #파싱오류
lubridate::wday('20180201', label=T)  #파싱오류
lubridate::wday('2018/2/1', label=T)  #파싱가능

lubridate::wday(as.Date('20230201', '%Y%m%d'), label=T) # 날짜 파싱 후 요일 변환

R에서는 년월일 구분 기호가 있어야 자동으로 날짜 파싱이 가능하다.

 

 

728x90

 

 

3. pie chart

범주형 자료 비교 시각화 기법(총 합이 100, % 표현 적합)이다.

 

옵션은 다음과 같다.

 

pie(x,                          # 벡터(각 파이 크기)

     labels =  ,              # 벡터 ( 각 파이 이름)

     edges = 200,         # 파이 모양(가장자리?)

     radius = 0.8,          # 크기

     clockwise = F        # 시계방향 진향 여부

     init.angle = ,          # 파이 시작 위치

     ...)

 

예) 각 후보의 지지율 비교

 

 

 

위 파이 차트를 3차원으로 나타낼 수 있다.

install.packages('plotrix')
library(plotrix)

plotrix 패키지를 불러와서  pie3D 함수를 사용하면 된다.

 

pie3D 함수 옵션이다.

pie3D(x,                 # 각 파이 크기
      height = ,         # 파이 높이
      col , 
      labels = ,         # 파이 이름
      labelcex = ,
      labelcol = , 
      labelpos = ,
      explode = )       # 파이 간격

 

 

이름을 legend로 올리고, 파이 이름을 점유율로 바꾸면 아래 처럼 나타낼 수 있다.

 

 

 

연습문제

영화이용현황.csv 파일을 읽고 각 연령대(20대, 30대)별 남, 여 이용 현황을 비교하여라.

 

 

 

 

 

 

 

기타 시각화 옵션

1. text

text(x,               #위치

       y,               # 위치

      labels,        # 표현할 텍스트

     adj = ,          # 좌우 정렬

     xpd  = F,      # 그래프 밖 출력 여부

     srt = 0)         # 표현하고자 하는 회전 각도

 

 

예) 위의 bar plot의 요일에 대한 출력을 회전으로 나타내어라.

 

Line 32처럼 par('usr') 하면 순서대로 그래프 가장자리 위치 좌표가 나타난다(좌, 우, 하, 상 순서)

 

2. 여백 설정

위 그래프에 y축 옆으로 '이용비율'이라는 글자를 넣어보았다.

Line 38을 추가하니 아래와 같이 출력되었다.

 

위의 이용비율이라는 글자가 다 출력되기 위해서는 왼쪽 여백을 늘려줘야 한다.

이 때에는 par('mar')를 실행하면 현재 여백을 확인할 수 있다(순서대로 하, 좌, 상, 우).

 

Line 40을 실행 후 다시 barplot을 그려주면 아래와 같이 이용비율이 잘리지 않고 잘 나타난다.

 

 

3. 화살표 표현

 

arrows(x0,                     # 화살표 시작점
            y0,                     # 화살표  시작점
            x1,                    # 화살표 끝점
            y1,                    # 화살표 끝점
           length = 0.25,    # 촉의 길이
           col,
           lty ,
          lwd)

 

 

예시로 바로 나타내어보자.

위 barchart의 이용비율이 최대인 지점을 화살표로 표현하여라. '최대'의 text를 출력할 것

추가로 위 Lines를 수행하면 아래와 같은 결과를 출력할 수 있다.

 

 

728x90
반응형