[14-03-04]

6. 벡터 그래프를 이용한 그래프 후 처리

6.1 환경 설정하기

6.2 예제 그래프 만들기

library(plyr)
library(ggplot2)
setwd("C:/Users/Byeongsoo/Desktop/R markdown")
load("market_price.RData")

일단 작업에 필요한 환경을 만들어주고 ~

res <- ddply(market_price, .(M_TYPE_NAME, A_NAME), summarise, avg = mean(A_PRICE))

M_TYPE_NAM과 A_NAME에 summarise를 적용하는 데 avg는 A_PRICE의 평균을 나타낸다.

res.plot <- ggplot(res, aes(A_NAME, M_TYPE_NAME)) + geom_tile(aes(fill = avg)) + 
    theme(axis.text.x = element_text(angle = 90, hjust = 1)) + scale_fill_gradient(low = "green", 
    high = "red")

<2>

이런 코드는 예전에 했던 것이므로 익숙하다.
필요한 포맷은 잉크스케이프에서 쓰일 벡터 기반의 그래프로, R에서 pdf출력을 통해 파일을 얻을 수 있다. 한글이 포함된 pdf파일을 출력하면, 한글 폰트가 깨진다 _이때 cairo_를 사용하여 이 문제를 피할 수 있다. <3>

또 한가지 문제는 cairo_pdf의 기본 폰트는 한글을 표현 할 수 없다. <4>

이 문제를 해결해보자.

# R 시스템에 등록된 폰트 리스트를 리스팅한다.
windowsFonts()
## $serif
## [1] "TT Times New Roman"
## 
## $sans
## [1] "TT Arial"
## 
## $mono
## [1] "TT Courier New"

# 폰트 등록
windowsFonts(malgun = windowsFont("맑은 고딕"))
windowsFonts()
## $serif
## [1] "TT Times New Roman"
## 
## $sans
## [1] "TT Arial"
## 
## $mono
## [1] "TT Courier New"
## 
## $malgun
## [1] "맑은 고딕"

windowsFonts() 명령어를 사용하면 현재 R 시스템에 등록된 폰트 매핑 테이블이 출력된다.

# 맑은고딕 폰트를 지정하고 그래프를 pdf로 저장
cairo_pdf(family = "malgun", width = 10, height = 5)
res.plot
dev.off()
## pdf 
##   2
graphics.off()

이렇게 하면 getwd()에서 출력되는 디렉토리에 Rplot001.pdf, Rplot002.pdf등의 이름의 파일이 생성된다.
이제 필요한 pdf파일은 완성됐다.

dev.off()를 실행해야 파일을 열 수 있다. 그래도 안되면 graphics.off()를 실행해야 한다. 이 명령어는 현재 이 그래프를 사용하고 있는 장치를 종료하는 명령어이다.

dev.off()를 하면 RStudio상에서 보여주는 그래프가 종료됨을 알 수 있다.

6.3 잉크스케이프로 그래프 후처리하기

7. R로 그래프 플로팅을 하기 위한 몇가지 팁

7.1 웹으로 게시할 그래프에 JPEG를 사용하지 말자.

다음은 JPEG와 PNG를 동일 크기의 이미지로 출력하기 위한 예제 코드다.

library(ggplot2)

jpeg(width = 500, height = 500, filename = "jpg.jpg")  # ----- ①
ggplot(diamonds, aes(carat, price)) + geom_line(aes(colour = clarity))

jpeg파일을 생성한다.

png(width = 500, height = 500, filename = "png.png")  # ----- ②
ggplot(diamonds, aes(carat, price)) + geom_line(aes(colour = clarity))

png파일을 생성한다.

cairo_pdf(filename = "pdf.pdf")  # ----- ③
ggplot(diamonds, aes(carat, price)) + geom_line(aes(colour = clarity))

<1>
확대 해보면, jpeg파일의 경계가 흐릿하고, 색상도 바랜 느낌이다. jpeg와 png모두 라인이 계단 모양으로 나타난 것을 알 수 있다.
png에도 만족하지 못한다면, pdf포맷 이미지를 출력할 것을 추천한다. <5>

7.2 안티얼라이어싱(anti-aliasing)을 활성화하라.

png(width = 400, height = 400, filename = "pngnaa.jpg", family = "malgun")
ggplot(diamonds, aes(carat, price), family = "malgun") + geom_line(aes(colour = clarity)) + 
    ggtitle("none 안티얼라이어싱")
dev.off()
## pdf 
##   2

png(width = 400, height = 400, filename = "안티얼라이어싱.jpg", type = "cairo", 
    antialias = "subpixel", family = "malgun")
ggplot(diamonds, aes(carat, price), family = "malgun") + geom_line(aes(colour = clarity)) + 
    ggtitle("안티얼라이어싱")
dev.off()
## pdf 
##   2

<안티얼라이싱>

cairo가 기본 탑재돼 있기 때문에, 위와 같은 명령어로 안티얼라이어싱을 할 수 있다.

7.3 정확한 디바이스 드라이버를 사용해 그래프를 저장하라.

7.5 필요할 떄 고해상도 이미지로 출력하라.

png(width = 360, height = 360, filename = "pngaa360.jpg", type = "cairo", antialias = "subpixel", 
    family = "malgun")
# res= 72 옵션은 생략
ggplot(diamonds, aes(carat, price), family = "malgun") + geom_line(aes(colour = clarity)) + 
    ggtitle("72 ppi(dpi)")
dev.off()
## pdf 
##   2

5인치를 표현하려면 가로와 세로를 360(5X72)픽셀로 지정해야 된다.

png(width = 1100, height = 1100, filename = "pngaa1100.jpg", type = "cairo", 
    antialias = "subpixel", family = "malgun", res = 220)
ggplot(diamonds, aes(carat, price), family = "malgun") + geom_line(aes(colour = clarity)) + 
    ggtitle("220 ppi(dpi)")
dev.off()
## pdf 
##   2

220ppi를 지원하는 같은 내용의 이미지를 만들기 위한 코드이다. 1100픽셀로 계산된다.

이제 두 그림을 비교해 보자. <6> <7> 확대해보면 더 큰 차이를 느낄 수 있다.

7.5 출력을 위해서라면 pdf를 활용하라.