본문 바로가기
2. 그래프 그리기 (고수준 함수)/barplot() - 막대그래프

R에서 막대그래프 그리는 방법, barplot()

by makhimh 2020. 1. 23.
반응형

R에서 막대그래프 그리는 방법, barplot()


아래 순서로 공부해봅시다. 


1) 막대그래프 기본형

2) 결과~요인 형태로 데이터 입력하기

3) 적층형그래프

4) 그룹형그래프

5) 그래프꾸미기

6) 막대에 값 표시하기

7) 오차막대 추가하기



1) 막대그래프 기본형


R에서 막대그리프를 그려주는 함수는 barplot() 입니다. 간단하게 데이터를 만들고 그려봅시다. 


mydata=c(5,8,3)

barplot(mydata,names=c("A","B","C"))




2) 결과~요인 형태로 데이터 입력하기


우리가 다루는 데이터들은 보통 아래와 같이 여러개의 변수들로 되어 있습니다. 


> head(longley,6)

     GNP.deflator     GNP Unemployed Armed.Forces Population Year Employed

1947         83.0 234.289      235.6        159.0    107.608 1947   60.323

1948         88.5 259.426      232.5        145.6    108.632 1948   61.122

1949         88.2 258.054      368.2        161.6    109.773 1949   60.171

1950         89.5 284.599      335.1        165.0    110.929 1950   61.187

1951         96.2 328.975      209.9        309.9    112.075 1951   63.221

1952         98.1 346.999      193.2        359.4    113.270 1952   63.639


barplot함수는 변수들간의 관계를 이용하여 데이터를 입력할 수 있습니다. R에서 기본제공하는 데이터인 longley를 이용하여 그래프를 그리겠습니다. 데이터 설명을 잠깐 드릴게요. 1947년부터 1962년의 기간동안 측정한 데이터들인데요. 항목은 아래와 같습니다. 


GNP.deflator : 명목GNP/실질GNP

GNP : 국민 총 생산

Unemployed : 실업자 수

Armed.Forces : 무장 군인 수

Population : 인구

Year : 연도

Employed : 취업자 수


국민 총 생산의 변화를 연 단위 막대그래프로 그려봅시다. 아래와 같은 형식으로 입력합니다. GNP~Year 의 의미는 독립변수가 Year이고, 종속변수가 GNP라는 말입니다. Year에 대한 GNP를 보겠다는 의미입니다. 콤마 뒤에 이 두 변수가 속한 데이터 이름을 입력하면 됩니다. 


barplot(GNP~Year,longley)


아래와 같이 입력해도 됩니다. 이미 데이터가 명시되어있기 때문에, 데이터 이름을 입력하지 않아도 됩니다. 


barplot(longley$GNP~longley$Year)





3) 적층형그래프


적층형 그래프는 하나의 막대가 여러 데이터를 포함하고 있는 그래프입니다. 아래와 같은 데이터를 만들고 행렬형태로 입력합시다. 


A=c(1,3,5)

B=c(2,4,6)

C=c(3,4,6)

mat=matrix(c(A,B,C),nrow=3,dimnames=list(c("1","2","3"),c("A","B","C")))


> mat

  A B C

1 1 2 3

2 3 4 4

3 5 6 6


cbind 함수를 를 사용하여 행렬을 만들 수도 있습니다. 


> mat2=cbind(A,B,C)

> mat2

     A B C

[1,] 1 2 3

[2,] 3 4 4

[3,] 5 6 6


위 행렬의 '열'이 막대가 됩니다. 세로 방향이 층이 쌓이는 순서입니다. 예를들어 A데이터는 1,3,5라는 값으로 층이 쌓을 것입니다. 그래프를 그려봅시다. 


barplot(mat)


이번에는 longley데이터를 이용하여 적층형 그래프를 그려봅시다. 실업자수를 아래층에, 취업자 수를 위층에 쌓겠습니다. 같은 cbind로 데이터를 합했지만, 위에서 그린 그래프와는 다릅니다. 위 그래프의 경우 하나의 열이 하나의 막대가 되는 반면, 아래처럼 formula 즉 ~ 를 이용하여 입력하는 경우 하나의 행이 하나의 막대가 됩니다. 


barplot(cbind(Unemployed,Employed)~Year,longley)





4) 그룹형 그래프


그룹형은 적층형에서 위로 쌓지 않고 옆으로 나란히 놓은 그래프입니다. 한가지 옵션만 설정하면 적층형이 그룹형으로 바뀝니다. beside를 TRUE로 설정하면 됩니다. 


A=c(1,3,5)

B=c(2,4,6)

C=c(3,4,6)

mat2=cbind(A,B,C)

barplot(mat2,beside=T)



longley데이터로도 그려봅시다. 


barplot(cbind(Unemployed,Employed)~Year,longley,beside=T)





5) 그래프 꾸미기


이번에는 그래프를 꾸며봅시다. 아래와 같은 꾸미기 옵션들이 있습니다. 


- 그래프이름, 축이름

- 글자크기

- 축 범위

- y축 눈금 간격

- 막대 색

- 범례

- 테두리 색


그래프 이름과 축이름은 barplot 함수 안에 main과 xlab, ylab 옵션을 설정하면 표시됩니다. 


barplot(mat2,beside=T,main="my main",xlab="my X",ylab="my Y")



barplot(cbind(Unemployed,Employed)~Year,longley,beside=T,main="Employed and Unemployed data by year",xlab="Year",ylab="num")




글자크기는 cex. 옵션을 사용합니다. 초기값은 1.2입니다. cex.main와 cex.lab에 값을 입력해줍니다. 


barplot(cbind(Unemployed,Employed)~Year,longley,beside=T,main="Employed and Unemployed data by year",xlab="Year",ylab="num",cex.main=2,cex.lab=2)



축범위는 ylim과 xlim 옵션을 사용합니다. 막대그래프의 경우 xlim 옵션은 필요없습니다. ylim=c(최소,최대) 형식으로 옵션을 추가합니다. 


barplot(cbind(Unemployed,Employed)~Year,longley,beside=T,main="Employed and Unemployed data by year",xlab="Year",ylab="num",cex.main=2,cex.lab=2,ylim=c(0,500))



y축 눈금 간격은 barplot함수의 axes옵션을 끄고, axis라는 함수를 사용하여 그려줘야합니다. side는 축을 설정합니다. 1은 x축, 2는 y축입니다. at에 눈금을 입력합니다. seq함수를 이용하여 입력했습니다. 간격을 50으로 만들었습니다. 


barplot(cbind(Unemployed,Employed)~Year,longley,beside=T,main="Employed and Unemployed databy year",xlab="Year",ylab="num",cex.main=2,cex.lab=2,ylim=c(0,500),axes=F)


axis(side=2,at=seq(0,500,by=50))



막대의 색은 col 옵션을 사용합니다. 색 벡터 생성은 rainbow함수를 사용합니다. rainbow함수는 입력된 값만큼의 색을 벡터로 반환해줍니다. 


barplot(cbind(Unemployed,Employed)~Year,longley,beside=T,main="Employed and Unemployed data by year",xlab="Year",ylab="num",cex.main=2,cex.lab=2,ylim=c(0,500),axes=F,col=rainbow(2))


axis(side=2,at=seq(0,500,by=50))



범례를 추가합시다. legend함수를 사용합니다. 위치는 우측상단(topright)로 설정합니다. legend옵션에는 범례로 들어갈 이름들을, fill에는 색을 설정해줍니다. 그래프가 잘리므로, ylim을 수정해주었습니다. 


barplot(cbind(Unemployed,Employed)~Year,longley,beside=T,main="Employed and Unemployed data by year",xlab="Year",ylab="num",cex.main=2,cex.lab=2,ylim=c(0,600),axes=F,col=rainbow(2))


axis(side=2,at=seq(0,600,by=50))

legend("topright",legend=c("Employed","Unemployed"),fill=rainbow(2))



테두리 색을 투명으로 하고 싶은 경우 border="white" 를 입력합니다. 



6) 막대에 값 표시하기


Acafe=c(105,32,34,12,51)
Bcafe=c(202,18,33,15,7)
Ccafe=c(303,35,12,33,16)

mat=matrix(c(Acafe,Bcafe,Ccafe), nrow=5)
coffee_name=c("americano","latte","macchiato","mocha","cappuccino")


mybp=barplot(
  mat,
  beside=T,
  ylim=c(0,400),
  names=c("Acafe","Bcafe","Ccafe"),
  col=rainbow(5),
  border="white",
  main="Sales comparison of three cafes",
  xlab="Cafe",
  ylab="Total sales"
)
text(x=mybp,y=mat,labels=mat,pos=3,col="black")


반응형

댓글