Jupyter R kernel에서 ggplot 그래프에 일본어가 표시되지 않는 문제를 해결합니다.
우분투의 경우
Jupyter notebook에서 다음 R 코드를 실행하면,
library(ggplot2)
d <- data.frame(x=c("ABC", "DEF", "GHI"), y=c(1, 2, 3))
ggplot(d, aes(x, weight=y)) +
geom_bar(fill="gray50", color="gray10") + geom_text(aes(y=y, label=x)) +
xlab("horizontal label") + ylab("vertical label") + ggtitle("Title")
d <- data.frame(x=c("あいうえお", "かきくけこ", "さしすせそ"), y=c(1, 2, 3))
ggplot(d, aes(x, weight=y)) +
geom_bar(fill="gray50", color="gray10") + geom_text(aes(y=y, label=x)) +
xlab("横軸") + ylab("縦軸") + ggtitle("タイトル")
자신의 우분투 18.04 환경에서는 다음 출력이 되었다. 일본어가 모두 비어 있습니다.
다양한 정보를 보았다. 다음 중 어느 것도 작동하지 않았다.
theme(text=element_text(family="font-name"))
에서 글꼴 지정 extrafonts
에서 글꼴 로딩 quartzFonts()
로 글꼴 이름 등록 에러도 경고도 없고, 단지 표시되지 않는 상태였다.
그런데,
ggsave
를 사용해 파일에 쓸 때 제대로 출력되고 있는 것 같았다. 그래서 근본적인 대처는 몰랐지만 그래프를 임시 파일에 내보내서 그것을 표시시키는 방식을 취했다.ggshow <- function(g=last_plot(), dispwidth=600, dispheight=NULL, tmpdir="ggtmp", ...) {
# show ggplot graph
# a quick workaround to the issue where
# Japanese texts are not displayed on the notebook
if (!dir.exists(tmpdir)) {
if (file.exists(tmpdir)) {
stop(sprintf("'%s' already exists as a file.", tmpdir))
}
dir.create(tmpdir, recursive=TRUE)
}
tmpfile <- file.path(tmpdir, "tmp.jpg")
ggplot2::ggsave(tmpfile, g, ...)
IRdisplay::display_jpeg(file=tmpfile, width=dispwidth, height=dispheight)
}
ggshow()
ggshow
함수 정보g
에 표시하고 싶은 ggplot
오브젝트를 지정. dispwidth
, dispheight
로 표시 사이즈를 지정. 한쪽만 지정하면 종횡비 고정으로 조정된다. ...
는 ggsave
로 전달되므로 width
, height
등을 지정하여 크기를 조정할 수 있습니다. 일단 목적은 달성할 수 있지만, 근본적으로 해결하는 방법이 있다면 꼭 가르쳐 주었으면 합니다.
MacBook의 경우
MacBook에서 같은 코드를 실행하면 대량의 경고가 나오고 이른바 '두부'가 나타났다. 폰트가 대응하고 있지 않는 것이 원인인 것 같다.
대처법으로서는, 이 기사 을 참고로, 이하의 스텝을 취했다.
자신이 가진 글꼴 확인
systemfonts::system_fonts()
를 사용하면 편리합니다. 그러나, 출력량이 많기 때문에, 예를 들면 다음과 같은 코드로 폰트명에 맞추어 검색한다.library(dplyr)
systemfonts::system_fonts() %>% filter(grepl("Hira", family)) %>% select(name, path)
HiraginoSans-W8 /System/Library/Fonts/ヒラギノ角ゴシック W8.ttc
HiraginoSansGB-W6 /System/Library/Fonts/Hiragino Sans GB.ttc
HiraginoSans-W6 /System/Library/Fonts/ヒラギノ角ゴシック W6.ttc
HiraMaruProN-W4 /System/Library/Fonts/ヒラギノ丸ゴ ProN W4.ttc
...
좋아하는 일본어 폰트를 등록
그리기에는
quartzFonts
라는 것이 사용되는 것 같기 때문에 위에서 찾은 폰트를 등록한다.4개 반복하고 있는 것은 「표준」 「굵은 글씨」 「이탤릭」 「굵은 글씨・이탤릭」의 4종류 등록하는 사양에 대응하기 위해서.
같은 폰트에서도 그래프 묘화에서는 그다지 곤란하지 않기 때문에 구별하고 있지 않다.
quartzFonts(hiragino=rep("HiraMaruProN-W4", 4)) # 登録
quartzFonts() # 結果を確認
$serif
'Times-Roman''Times-Bold''Times-Italic''Times-BoldItalic'
$sans
'Helvetica''Helvetica-Bold''Helvetica-Oblique''Helvetica-BoldOblique'
$mono
'Courier''Courier-Bold''Courier-Oblique''Courier-BoldOblique'
$hiragino
'HiraMaruProN-W4''HiraMaruProN-W4''HiraMaruProN-W4''HiraMaruProN-W4'
그래프 작성시 글꼴 지정
theme(text=element_text(family="font-name"))
로 지정할 수 있다. geom_text
의 family
옵션으로 폰트를 지정할 수 있다. jofont <- "hiragino"
d <- data.frame(x=c("あいうえお", "かきくけこ", "さしすせそ"), y=c(1, 2, 3))
# gets warnings, but works
ggplot(d, aes(x, weight=y)) +
geom_bar(fill="gray50", color="gray10") +
geom_text(aes(y=y, label=x), family=jpfont) +
xlab("横軸") + ylab("縦軸") + ggtitle("タイトル") +
theme(text=element_text(family=jpfont))
노트북에서 실행했는데, 대량의 경고
“ ポストスクリプトフォントのデータベースにフォントファミリ 'hiragino' が見付かりません ”
를 내면서도 그래프가 제대로 출력되었다.경고가 싫으면
suppressWarnings
를 사용하여 출력을 피할 수 있습니다.또는 위에서 정의한
ggshow
함수는 MacBook에서도 작동합니다.실행 예
이 기사의 실행 예 (Gist)
Reference
이 문제에 관하여(Jupyter R kernel에서 ggplot 그래프에 일본어가 표시되지 않는 문제를 해결합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kota9/items/60b55b85ba327788751e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)