[R] 막대그래프 그리기(barplot)
- R
- 2022. 6. 8.
barplot 함수는 x축의 범주 대비 수치형 데이터를 막대의 길이로써 시각화하는 막대그래프를 출력해주는 함수입니다.
히스토그램과 굉장히 유사하지만 다른 점이 있습니다.
barplot과 히스토그램의 차이점
각 차이점은 크게 세가지 정도로 나눌 수 있을 것 같습니다.
막대그래프 | 히스토그램 | |
---|---|---|
x축 | 값이 연속적이지 않아도 됨 | 연속적이고 분할 가능한 값만 적용가능 |
y축 | 각 값의 크기 | 계급의 도수(범위의 해당하는 변량수) |
막대위치 | 막대가 떨어져있음 | 막대가 붙어있음 |
막대그래프 그리기
barplot함수의 파라미터는 히스토그램보다 적습니다.
주요 파라미터는 다음과 같습니다.
- height : 벡터 입력시 각 막대의 높이, 행렬 입력시 열의 개수 만큼 막대 생성, 행의 값의 누적이 막대의 높이
- xlab : x축 제목
- ylab : y축 제목
- main : 그래프의 제목 지정
- legend : 범례 넣기
- names : 각 막대의 라벨을 정하기
- width : 각 막대의 상대적인 폭 정하기
- space : 막대 사이의 간격
- beside : TRUE - 각각의 값마다 막대를 그리기(그룹별로 묶기)
- horiz : 축 바꾸기(FALSE 디폴트)
- angle : 막대를 칠하는 선분의 각도
- density : 막대를 칠하는 선분의 수
- col : 선분의 색 정하기
기본 그래프
barplot은 barplot(height,옵션), barplot(formula,data,옵션) 2가지 방식으로 입력합니다.
barplot(height,옵션)은 대상이 벡터와 행렬일 때만 가능합니다.
barplot(formula,data,옵션)은 모든 대상이 가능한데 기본적인 원리는 y~x로 객체를 연결합니다. 일반적으로 y값은 height을 나타내고 x값은 범주를 나타냅니다.
따라서, y은 수치형데이터, x는 범주형 데이터를 넣어주어야 합니다.
벡터
벡터하나만 있으면 아무런 옵션없이 막대그래프를 간단하게 만들 수 있습니다.
v = c(1,2,3,4,5)
barplot(v)
x축에 이름을 달아주어야 하는데 그건 names 파라미터에 입력하면 됩니다. 또는 fomula 방식으로 v~name 으로 써도 그려집니다.
name = c('1반','2반','3반','4반','5반')
barplot(v,names=name) # barplot(v~name)
행렬
행렬인 경우에는 특별한 옵션을 넣지 않으면 막대그래프가 누적그래프로 만들어집니다. 열의 합계를 볼 수 있습니다.
m = matrix(1:16,nrow=4)
ncol(m)
barplot(m)
행의 합계로 표현하고 싶다면 transpose를 시킨후 그래프를 그립니다.
tm=t(m)
barplot(tm)
누적이 아닌 그룹별로 각각 보고 싶다면 beside=T를 입력합니다.
barplot(m,beside=T)
데이터프레임
데이터프레임을 막대그래프로 표현하려면 height만 입력해서는 나오지 않습니다.
물론 $column 으로 따로 컬럼을 뽑아낸다면 벡터로 인식하기 때문에 할 수 있기는 합니다. 이 방법은 위에서 보인 방법대로 하면 되므로 생략하겠습니다.
y~x 방식으로 그려내는것이 일반적입니다.
v2 = 2*v
df = data.frame(v,v2,name)
barplot(v2~name,data=df)
막대그래프로 그리려는 컬럼과 범주를 담당할 컬럼네임을 지정해 막대그래프를 그립니다.
이번에는 데이터프레임 안에서 그룹별로 그리고자 한다면 다음과 같이 합니다. col을 선택해주면 명확하게 구분해서 나오게 됩니다. color 팔레트는 파이썬의 seaborn에 내장되어 있기도 한 color brewer가 내장되어 있으므로 원하는 팔레트를 가져오면 됩니다.
팔레트에 대한 자세한 내용은 다음 포스팅을 참조하시면 좋을 것 같습니다.
[Python] seaborn color 팔레트
# 데이터프레임 만들기
class1 = c(100,45,80,75,30)
class2 = c(70,80,60,50,40)
class3 = c(40,50,60,70,80)
class4 = c(10,25,100,70,35)
class5 = c(60,55,55,45,35)
df = data.frame('class1'=class1,'class2'=class2,'class3'=class3,'class4'=class4,'class5'=class5)
# 막대그래프 그리기
barplot(as.matrix(df),beside=T,col=rainbow(5))
legend('topright',dimnames(df)[[1]],cex=0.8,fill=rainbow(5))
마치며
나머지 파라미터는 직접 코드를 쳐보면서 확인해보시거나 히스토그램과 같은 파라미터(density, angle,xlab,ylab 등)은 히스토그램 포스팅에 작성되어 있으니 살펴보시면 좋을 것 같습니다. 같은 막대류(?)라서 똑같이 작동합니다.
'R' 카테고리의 다른 글
[R] 파이차트 원 안에 글자 넣기 (0) | 2022.06.16 |
---|---|
[R] 파이차트(pie plot) 기본, 색상 바꾸기 (0) | 2022.06.14 |
[R] 데이터프레임 행,열 이름 가져오기 (0) | 2022.06.05 |
[R] 히스토그램(hist) 그리기 (0) | 2022.05.31 |
[R] 그래프 그리기(plot함수) (0) | 2022.05.26 |