finviz.com 사이트를 보면, 폰트가 이쁘기도 하고, 가독성이 좋다고 생각했다. 특히 자료를 나타내는 표 형식의 데이터 혹은 그래프상의 숫자에 어울리는 것 같다. 그래서 나역시도 ggplot2 로 그래프를 만들때 해당 폰트를 사용하고자 했는데 셋팅하는 데 시간이 생각보다 많이 걸렸다. 그 후기를 정리한다.
ggplot 그래프를 하나 그린다.
investing.com 사이트에서 kospi 지수 데이터를 내려받아 정리한다.
dt_kospi = read_csv('./KOSPI Historical Data.csv', show_col_types = F) |>
clean_names() |>
mutate(date = mdy(date), .before = "date")
그리고 그 데이터를 이용해서 ggplot 선그래프를 그린다. 별다른 폰트를 지정하지 않으면 그냥 디폴트 폰트가 출력된다.
ggplot(data = dt_kospi, aes(x = date, y = price)) +
geom_area(fill = "#D5EBFF", colour = "#84ACD1", size = 1, alpha = 0.5) +
coord_cartesian(ylim = c(dt_kospi |> pull(price) |> min() * 0.98,
dt_kospi |> pull(price) |> max() * 1.02)) +
theme_bw()
IBM Plex Sans KR 폰트 적용
내가 하려는건, svg 파일로 만들고 그 svg 파일을 웹사이트에 올렸을때, 특정 폰트로 출력될 수 있도록 셋팅하는 것이다. 먼저 IBM Plex Sans KR 웹폰트 주소를 알아야 한다. 해당 폰트를 제공하는 사이트로 이동한다.
가서 get embeded code 메뉴로 이동하면, 아래 화면을 볼 수 있는데, 사용할 사이즈를 다 고르면 된다. ggplot 의 경우 face 인자로 bold 정도만 구현이 가능해서 다 선택할 필요는 없어보이고, 내 경우 400, 700 만 선택했다.

그러면 @import 기능을 이용하면 웹폰트 주소를 가져올 수 있다.

주의할 점은 세세한 font-weight 가 설정이 안되기 때문에, 2가지 정도만 설정이 가능하다 생각하고 코딩을 해야했다. 제목에만 bold 를 지정했고, 나머지는 base_family 하나로만 지정했다. element_text 안에 family 옵션으로 폰트지정을 할 수 있긴한데, 오히려 지정을 하면 이상하게 다른 폰트로 셋팅되버렸다. 그래서 왠만하면 element_text 내 family 값은 최대한 사용하지 않았다.
ggplot(data = dt_kospi, aes(x = date, y = price)) +
geom_area(fill = "#D5EBFF", colour = "#84ACD1", size = 1, alpha = 0.5) +
coord_cartesian(ylim = c(dt_kospi |> pull(price) |> min() * 0.98,
dt_kospi |> pull(price) |> max() * 1.02)) +
labs(title = "KOSPI200",
subtitle = "(4.13) 주말에 미이란 협의가 무산되었고, 월요일 코스피 0.85% 하락으로 선방하며 마감.") +
theme_bw(base_family = "IBM Plex Sans KR") +
theme(
panel.grid.minor.y = element_blank(),
text = element_text(colour = "gray30"),
plot.title = element_text(size = 18, face = "bold"),
axis.title = element_blank(),
axis.text = element_text(size = 12))
마지막으로 svg 파일을 저장할때, svglite::web_fonts 옵션을 이용하여 웹폰트 주소를 기입하면 된다.
ggsave("./v1_kospi200_ibmplexsans.svg",
device = svglite::svglite,
web_fonts = list("https://fonts.googleapis.com/css2?family=IBM+Plex+Sans+KR:wght@400;700&family=IBM+Plex+Sans:ital,wght@0,500;1,500&family=Roboto:ital,wght@0,100..900;1,100..900&display=swap"),
width = 6, height = 4, units = "in")