시각화/R

▶R의 시각화 패키지 :: The Lattice Plotting System

비주얼라이즈 2015. 2. 12. 13:15





▶R의 시각화 패키지 ::  The Lattice Plotting System


The Lattice Plotting System in R


- R의 Lattice 플로팅 시스템(이하 Lattice)은 R에서 기본 플로팅시스템과 작동방법이 많이 다르다.


- Lattice는 다차원의 데이터를 사용하려고 할 때, 한번에 많은 플롯을 생성할 수 있다는 점에서 유용하다. 또한 Lattice에서는 기본 플로팅 시스템의 방법을 'mfrow'와 'mfcall'이라는 인수를 통해 활용할 수 있다.


- Lattice는 높은 밀도의 플롯을 효과적으로 그려내는데 최적화 되어있으며, 그밖에 여러 목적에 따라 활용되고있다.





 이글에서 'Lattice'에 대해서 다루고있는 내용


- Lattice 시스템의 기능

 - Lattice 시스템의 작동원리 

 - datasets패키지의 데이터를 활용한 스캐터플롯 예제







R의 시각화 패키지 - The Lattice Plotting System




Lattice : 래티스 시스템은 직교형태의 그래픽(Trellis graphic)을 생성하는 코드를 포함하고 있다. 여기서 말하는 기능은 R의 기본그래픽 시스템와는 다른 독립적인 것이다. 예로는 xyplot, bwplot, levelplot등이 있다.


grid : 래티스 시스템의 기능들은 앞서 말했듯이 R의 기본 그래픽시스템과 독립적으로 작동한다. 그리고 래티스 패키지는 그리위 "위에서" 수행된다.



R의 시각화 패키지 - Lattice Functions ① 기본내용


래티스 패키지에서 제공하고 있는 기능은 다양하다. 




xyplot :  스캐터플롯을 작성하는데 사용한다. (이것은 아마 래티스패키지에서 가장 중요하다고 할 수 있을 것이다.)

bwplot : 'bw'는 box와 whiskers를 의미한다. box plot으로 이해하면 된다.

histogram : 히스토그램이다. 여기에 대해서는 추가설명 생략.

stripplot : 박스플랏과 비슷하지만 actual point를 함께 표시한 것을 말한다.

dotplot : 바이올린의 줄처럼 생긴 구조 위에 점을 플로팅한다.

splom : 스캐터플롯(산점도) 매트릭스 : 이것은 기본 플로팅시스템의 'pairs'와 비슷하다.

levelplot, contourplot : 이미지 데이터를 플로팅한다.

** contour : (사물의)윤곽 또는 등고선을 말한다.



R의 시각화 패키지 - Lattice Functions ② 표현식


다음은 래티스패키지 활용시에 사용하게되는 코드의 일반적 형태다.



xyplot(y ~ x | f * g, data)


# 래티스에서는  '~' 형태의 표기법을 사용한다.

#'~'를 기준으로 왼쪽은 y축 변수를 가리키며, 오른쪽에는 x축 변수가 들어간다.


+ 위의 코드에서 f와 g는 conditioning variables이며, 이것들은 옵션이다. (*는 두 변수간의 상호관계를 의미) 쉽게말해, 우리가 만약 저 코드로 스캐터플롯을 그리고자 했다면, "f와 g의 모든 수준에 대한" 스캐터플롯을 그리자라는 의미입니다.


- xyplot의 두 번째 변수는, 룩업되어야 하는 데이터프레임(dataframe) 또는 리스트(list)를 의미한다.

- 데이터 프레임이 존재하지 않는 경우에는 작업공간에서 찾게된다.


+ 데이터프레임(data.frame)은 x, y, f, g변수의 위치를 찾을 수 있다.



R의 시각화 패키지 - Lattice 패키지로그리는 간단한 그래프




library(lattice)  #lattice library
library(datasets)  # 예제에 사용할 데이터를 얻기위한 라이브러리

예제에 필요한 라이브러리를 불러온다.




# datasets의 데이터중 'airquality'데이터를 활용.
str(airquality)  # 사용할 데이터의 형태 미리보기
## 'data.frame':    153 obs. of  6 variables:
##  $ Ozone  : int  41 36 12 18 NA 28 23 19 8 NA ...
##  $ Solar.R: int  190 118 149 313 NA NA 299 99 19 194 ...
##  $ Wind   : num  7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...
##  $ Temp   : int  67 72 74 62 56 66 65 59 61 69 ...
##  $ Month  : int  5 5 5 5 5 5 5 5 5 5 ...
##  $ Day    : int  1 2 3 4 5 6 7 8 9 10 ...
xyplot(Ozone ~ Wind, data = airquality)

plot of chunk unnamed-chunk-3

Ozone이 y축, wind가 x축에 해당하는 것을 확인할 수 있다.






## Convert 'Month' to a factor variable
airqualitys <- transform(airquality, Month = factor(Month))
xyplot(Ozone ~ Wind | Month, data = airqualitys, layout = c(5, 1))

plot of chunk unnamed-chunk-4

transform()을 사용하여 airquality데이터의 Month열의 데이터를 int에서 factor로 변경한다.














R의 시각화 패키지 - Lattice Behavior


래티스 그래픽 시스템은 R의 기본그래픽 시스템과 동작하는 방법이 다르다. 


- 기본그래픽 시스템의 기능은, 그래픽디바이스(화면, 파일출력 등)에  데이터를 플로팅한다.

- 래티스그래픽 시스템의 기능은 바로 그래픽디바이스 단계로 넘어가지 않고, trellis 클래스를 반환한다. 

.- 래티스그래픽 시스템에대한 print method를 입력해야만이 그래픽디바이스에 데이터가 플로팅되기 시작한다.




+ 간단하게, 기본그래픽기능으로 그리면 바로 plot창에 뜨고, 래티스기능으로 그리면 바로 plot창에 뜨는 것이 아니라는 것이다. 정말 그럴까? 직접 코드를 실행해보았다.







library(datasets)
library(lattice)
p <- xyplot(Ozone ~ Wind, data = airquality)  ##아무결과도 보이지않는다.
print(p)  ## plot을 보이게한다.

plot of chunk unnamed-chunk-1




분명 p라는 변수안에 xyplot의 결과를 담았더니, R이 조용하다. 이 한줄의 명령어만으로는 그래픽디바이스에서 결과값을 출력하고있지 않는다는 것이다. 위의 코드에서 xyplot()의 다음줄인 print(p)명령어로 스캐터플롯을 띄웠다.



개인적으로는 "래티스와 기본 그래픽프로그램 사이에 이러한 차이점이 있구나"정도만 알고넘어가면 될 것 같다.  사실 래티스패키지로 그렸다고해서 항상 이런 특성을 갖는 것도 아니다. 다음은 동일한 데이터에 대해 래티스의 xyplot을 실행한 결과이다.



library(datasets)
library(lattice)
xyplot(Ozone ~ Wind, data = airquality)  ### auto-printign!

plot of chunk unnamed-chunk-1





이와같이, 래티스 그래픽시스템에서는 xyplot()을 어떻게 사용하느냐에 따라서 결과값이 바로 plot창에 프린트되기도하고, print()같은 명령어입력후에 출력되기도 한다.