Categories: R

R 使用自訂字型顯示中文與圖示 showtext 套件教學與範例

介紹如何在 R 中使用 showtext 套件載入並使用自訂的字型顯示文字或圖示。

在許多情況下,在 R 中使用非標準的字型進行繪圖並不容易,在作業系統上雖然安裝了許多字型,但是在 R 中並沒有辦法直接使用,例如在圖形中顯示中文字就是一個常見的問題。

R 的 showtext 是一個可以讓使用者在 R 中自由匯入並使用各種字型的套件,相較於既有的 extrafont 套件,showtext 支援更多種的字型檔案(包含 TrueType、OpenType、Type 1 與 web fonts 等)與 R 的圖形設備,並且不需要依賴外部的程式(例如 Ghostscript)。

安裝 showtext 套件

R 的 showtext 套件可以透過官方的 CRAN 套件庫來安裝:

# 安裝 showtext 套件
install.packages("showtext")

使用 showtext 套件

showtext 可以用來載入各種的字型,用於各種圖形設備上,以下是載入並使用字型檔案的範例。

先準備好自己的字型檔案,然後使用 font_add() 函數加入字型,再呼叫 showtext_auto() 函數讓 showtext 自動處理文字的顯示,隨後即可在各種繪圖環境中使用剛加入的字型了。

showtext 支援的檔案類型有 TrueType、OpenType、Type 1 與 web fonts 等,這裡我們使用 jf open 粉圓字型台北黑體字型作為示範。

# 載入 showtext 套件
library(showtext)

# 加入 jf open 粉圓字型
font_add("openhuninn", "jf-openhuninn-1.1.ttf")

# 加入台北黑體字型(標準字體、粗體)
font_add("TaipeiSansTCBeta",
	 regular = "TaipeiSansTCBeta-Regular.ttf",
         bold = "TaipeiSansTCBeta-Bold.ttf")

# 自動使用 showtext 顯示文字
showtext_auto()

# 測試文字用的繪圖
plot(1, type="n", xlim = c(0, 6), ylim = c(0, 2))

# 使用 jf open 粉圓字型
text(3, 0.5, "jf open 粉圓字型", family = "openhuninn",
     col = "steelblue", cex = 3)

# 使用台北黑體字型(標準字體)
text(3, 1, "台北黑體字型(標準字體)", family = "TaipeiSansTCBeta",
     col = "steelblue", cex = 3)

# 使用台北黑體字型(粗體)
text(3, 1.5, "台北黑體字型(粗體)", family = "TaipeiSansTCBeta",
     font = 2, # 2 代表 bold 字體
     col = "steelblue", cex = 3)

# 停止使用 showtext 顯示文字
showtext_auto(FALSE)
使用自訂字型顯示文字

ggplot2 繪圖字型

ggplot 的圖形中也可以直接使用 showtext 來顯示文字。

library(showtext)
font_add("openhuninn", "jf-openhuninn-1.1.ttf")
font_add("TaipeiSansTCBeta",
	 regular = "TaipeiSansTCBeta-Regular.ttf",
         bold = "TaipeiSansTCBeta-Bold.ttf")
showtext_auto()

# 使用 ggplot 繪圖
library(ggplot2)
ggplot(NULL, aes(x = 1, y = 1)) +
    xlim(0, 4) + ylim(0, 2) +
    theme(axis.title = element_blank(), axis.ticks = element_blank(),
          axis.text = element_blank()) +
    annotate("text", 2, 0.5, label = "jf open 粉圓字型",
             family = "openhuninn", size = 24) +
    annotate("text", 2, 1, label = '台北黑體字型(標準字體)',
             family = "TaipeiSansTCBeta", size = 24) +
    annotate("text", 2, 1.5, label = '台北黑體字型(粗體)',
             family = "TaipeiSansTCBeta", fontface = "bold", size = 24)

showtext_auto(FALSE)
ggplot 使用自訂字型顯示文字

文泉驛字型

showtext 套件本身就有內建免費的文泉驛字型(wqy-microhei),如果只是單純想要顯示中文字,用這個字型就非常方便。

library(showtext)

# showtext 內建文泉驛字型(wqy-microhei)
showtext_auto()

library(ggplot2)
ggplot(NULL, aes(x = 1, y = 1)) +
    xlim(0, 4) + ylim(0, 2) +
    theme(axis.title = element_blank(), axis.ticks = element_blank(),
          axis.text = element_blank()) +
    annotate("text", 2, 1, label = "文泉驛字型",
             family = "wqy-microhei", size = 24)

showtext_auto(FALSE)
showtext 內建的文泉驛字型

當載入 showtext 套件並執行 showtext_auto() 之後,如果沒有特別指定字型,中文字會自動使用文泉驛字型來顯示,所以只要啟用了 showtext 自動處理字型之後,中文字都可以正常顯示。

思源黑體、思源宋體字型

showtext 套件提供了自動安裝思源黑體、思源宋體字型的函數,可以省去手動下載的動作()。

library(showtext)

# 安裝思源黑體字型
font_install(source_han_sans(lang = "TW"))

# 安裝思源宋體字型
font_install(source_han_serif(lang = "TW"))

安裝好之後,可以呼叫 font_families() 函數顯示目前可用的字型:

# 顯示目前可用的字型
font_families()
[1] "sans"                "serif"               "mono"               
[4] "wqy-microhei"        "source-han-sans-tw"  "source-han-serif-tw"

接著就可以使用思源黑體或思源宋體字型來顯示文字了。

showtext_auto()

# 使用 ggplot 繪圖
library(ggplot2)
ggplot(NULL, aes(x = 1, y = 1)) +
    xlim(0, 4) + ylim(0, 2) +
    theme(axis.title = element_blank(), axis.ticks = element_blank(),
          axis.text = element_blank()) +
    annotate("text", 2, 0.5, label = "思源黑體字型",
             family = "source-han-sans-tw", size = 24) +
    annotate("text", 2, 1.5, label = "思源宋體字型",
             family = "source-han-serif-tw", size = 24)

showtext_auto(FALSE)
思源黑體、思源宋體字型

Font Awesome 5 字型

若需要使用 Font Awesome 5 圖示字型檔,可從其 GitHub 網站下載 fa-brands-400.ttffa-solid-900.ttffa-regular-400.ttf 三個 TTF 字型檔案,並以 showtext 載入使用。

library(showtext)

# 新增 Font Awesome 5 字型
font_add(family = "FontAwesome5Free-Solid", regular = "fa-solid-900.ttf")
font_add(family = "FontAwesome5Free-Regular", regular = "fa-regular-400.ttf")
font_add(family = "FontAwesome5Brands-Regular", regular = "fa-brands-400.ttf")

接下來就可以在一般的繪圖指令中使用 Font Awesome 5 字型了:

showtext_auto()

# 使用 ggplot 繪圖
library(ggplot2)
ggplot(mtcars, aes(mpg, wt, colour = factor(cyl))) +
  geom_text(label = "\Uf1b9",
            family = "FontAwesome5Free-Solid",
            size = 5) +
  scale_color_brewer(palette="Dark2")

showtext_auto(FALSE)
ggplot 使用 Font Awesome 5 字型

waffle 套件也可以靠 showtext 來加入 Font Awesome 5 圖示使用。

Google 字型

若需要使用 Google 字型,可以使用 font_add_google() 函數自動下載並載入 Google 字型:

library(showtext)

## 下載並加入 Google 字型
font_add_google("Gochi Hand", "gochi")
font_add_google("Schoolbell", "bell")

showtext_auto()

# 使用 Google 字型繪圖
set.seed(123)
hist(rnorm(1000), breaks = 30, col = "steelblue", border = "white",
     main = "", xlab = "", ylab = "")
title("Histogram of Normal Random Numbers", family = "bell", cex.main = 2)
title(ylab = "Frequency", family = "gochi", cex.lab = 2)
text(2, 70, "N = 1000", family = "bell", cex = 2.5)
使用 Google 字型繪圖

參考資料

Share
Published by
Office Guide

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

1 年 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

1 年 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

1 年 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

1 年 ago