앞서 R에서 히스토그램과 확률밀도 함수, 박스 플롯 등 몇 가지 그래프를 그리는 방법을 설명드렸습니다. 그런데 사실 하나의 그래프에 모든 것을 표시하기보다는 여러 그래프를 하나의 화면에 담아야 하는경우가 생길 수 있습니다. plot 함수를 이용해서 그래프를 그릴 경우 par 함수가 몇 개의 그래프를 담을지 결정하는 함수가 됩니다. 이전과 마찬가지로 diamonds 데이터셋을 이용하겠습니다.
library("ggplot2")
par(mfrow=c(2,2))
hist(diamonds$price, breaks=50)
hist(diamonds$x, breaks=50)
hist(diamonds$y, breaks=50)
hist(diamonds$z, breaks=50)
par 함수는 mfrow=c(2,2) 식으로 그래프의 위치를 정해줍니다. 이 경우 2행, 2열에 해당합니다. 각각 가격, 그리고 x, y, z 축에 대한 정보가 담겼습니다. 그런데 여기서 히스토그램을 지시하는 명령어를 네줄에서 한줄로 줄일 수 있는 방법이 있습니다. 바로 for 문을 이용하는 것입니다. str 명령어로 보면 이 내용은 7-10줄 사이 입니다. for 문을 이용해서 이 내용을 지정해주고 길이를 줄여보겠습니다.
par(mfrow=c(2,2))
for(k in 7:10) hist(diamonds[[k]], breaks=50)
for 의 사용에 대해서는 앞으로 계속 언급하게 될 것입니다. 참고로 히스토그램 명령어로 그릴 수 있는 것은 연속변수입니다. 범주형 자료는 에러가 나오게 되니 참고하시기 바랍니다. for 문을 사용할 수 있는 경우 역시 str 명령어로 볼 수 있는 자료가 서로 순서대로인 경우입니다. 모든 경우에 다 사용하기는 어렵습니다.
아무튼 par 명령어를 사용하면 여러 개의 그래프를 한 화면에 담을 수 있습니다. 당연히 앞으로 많이 사용하게 될 명령어라고 할 수 있습니다. 그런데 그래프는 여러개인데 타이틀이나 색상이 없어서 구분이 어렵습니다. 이 경우 당연히 각각의 히스토그램을 꾸며주면 됩니다.
par(mfrow=c(2,2))
hist(diamonds$carat, col="red", freq=FALSE, main="Distribution of diamonds (Carat)", xlab=expression(Carat), breaks=50)
hist(diamonds$price, col="blue", freq=FALSE, main="Distribution of diamonds (price)", xlab=expression(price), breaks=50)
hist(diamonds$depth, col="yellow", freq=FALSE, main="Distribution of diamonds (depth)", xlab=expression(depth), breaks=50)
hist(diamonds$x, col="lightgreen", freq=FALSE, main="Distribution of diamonds (x)", xlab=expression(x), breaks=50)
좀더 보기 편하고 구분이 쉬운 그래프가 되었습니다. 이번에는 cut 등급에 따른 가격의 분포를 이렇게 표시해보겠습니다. 이를 위해서 subset 명령어로 각각의 그룹을 묶습니다. 나머지는 동일합니다.
par(mfrow=c(2,3))
diamonds1<-subset cut="=" diamonds="" ood="" span="">-subset>
hist(diamonds1$price, col="pink", main="price of diamonds (Good)", xlab=expression(price), breaks=50)
diamonds1<-subset air="" cut="=" diamonds="" span="">-subset>
hist(diamonds1$price, col="skyblue", main="price of diamonds (Fair)", xlab=expression(price), breaks=50)
diamonds1<-subset cut="=" diamonds="" ery="" good="" span="">-subset>
hist(diamonds1$price, col="red", main="price of diamonds (Very Good)", xlab=expression(price), breaks=50)
diamonds1<-subset cut="=" diamonds="" remium="" span="">-subset>
hist(diamonds1$price, col="yellow", main="price of diamonds (Premium)", xlab=expression(price), breaks=50)
diamonds1<-subset cut="=" deal="" diamonds="" span="">-subset>
hist(diamonds1$price, col="lightgreen", main="price of diamonds (Ideal)", xlab=expression(price), breaks=50)
참고로 그래프는 클릭해서 확대할 수 있고 코드는 그냥 복사해서 붙이면 작동할 것입니다.
그래프에 대한 이야기는 아마 해도 해도 끝이 없을 것 같습니다. 다음에는 정규분포에 대한 이야기를 해보겠습니다.
댓글
댓글 쓰기