ggplot
을 사용할 때, 컴퓨터에 설치되어 있는 폰트를 사용하여 텍스트를 표현할 수 있다. 그런데 특정 폰트를 사용하여 RStudio 에서 차트를 생성하면 plot 뷰어에서는 제대로 폰트가 잘 적용이 되다가, ggsave
로 export 를 하면 기본폰트처럼 돌아가 있는 현상이 있었다.
RStudio Plot 뷰어에서는 아래와 같이 특정폰트 설정한 결과가 잘나온다.
ggplot(sido_map_sim) +
geom_sf() +
theme_bw(base_family = '폰트명입력')
그런데 ggsave
로 막상 차트를 파일로 저장하면, 아래와 같이 전혀 다른 폰트가 나온다.
ggsave("./mypath/filename.png",
width = 8, height = 8,
dpi = 240, units = "in")
extrafont 설치
사전작업으로 컴퓨터에 설치되어 있는 폰트를 활용하기 위한 extrafont
설치가 필요하다.
install.packages("extrafont")
import 최초과정은 몇분걸린다. 특정폰트만 import 하고 싶으면 안에 파라메터를 설정하면 되지만, 한번만 하면 되는 과정이라 다 import 했다.
library(extrafont)
font_import()
Importing fonts may take a few minutes,
depending on the number of fonts and the speed of the system.
Continue? [y/n] # y 입력
그리고 extrafont
db에 저장된 폰트들을 load 하는 과정을 실행한다.
loadfonts()
ggsave device 설정
예전에는 여기까지 하면 이 폰트문제가 해결이 되었는데, 여전히 ggsave 함수를 이용해서 나오는 png
파일에 폰트가 적용이 안되었다. 최근에 ggplot2
를 재설치했기 때문에 내가 모르는 변화사항이 있는거 같아 버전을 우선 확인한다.
packageVersion('ggplot2')
[1] ‘3.4.4’
ggplot2 Changelog를 확인하다가, 아래 부분을 확인하게 되었다. ggsave 3.3.4
업데이트 되면서, device
파라메터에 ragg
로 기본으로 셋팅되도록 변화가 있었다. 근데 어떤 이유인지는 아직 모르겠지만, 내 환경에서는 ragg 가 정상작동하지 않는 것 같았다.
ggplot2 3.3.4 - CRAN release: 2021-06-16
ggsave() now uses ragg to render raster output if ragg is available.
It also handles custom devices that sets a default unit
(e.g. ragg::agg_png) correctly (@thomasp85, #4388)
원래 device
로 바꿔야겠다는 생각을 했고, 아래와 같이 소스를 수정해서 실행하니 해결이 되었다.
ggsave("./mypath/filename.png",
device = grDevices::png, # device 설정 추가
width = 8, height = 8,
dpi = 240, units = "in")
저 device
에 들어가는 패키지를 아래와 같이 풀어서 실행해도 동일한 파일을 얻을 수 있다. plot
을 g1
이름으로 저장하는 과정까지 있어야 하니, 사실 이 방법은 잘 사용하지 않을 것 같다.
png(filename = "./mypath/filename.png",
width = 8, height = 8,
res = 240, units = "in")
print(g1)
dev.off()