添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

怎麼在R語言的圖表中顯示中文?

用R語言畫長條圖 bar chart 一文中,我介紹怎麼用 ggplot2 套件畫出長條圖。當時圖表中有成功顯示中文,究竟是怎麼做到的?這篇文章會提供程式碼,讓你不用每次畫圖都要重新 Google。

這張圖屬於散點圖,只是將散布的「點」用球員中文名稱呈現 這張圖屬於散點圖,只是將散布的「點」用球員中文名稱呈現

在MAC系統中畫圖時,如果沒有指定合適的中文字體,圖表中的中文就會變成方塊,例如 RStudio Community 的 這篇文

沒有指定合適的中文字體時會變成方格,來源:RStudio Community 沒有指定合適的中文字體時會變成方格,來源:RStudio Community

想要呈現中文並不困難,不用額外安裝套件,只要找到 正確的字體名稱就好 。那麼,要怎麼知道字體叫什麼名字?答案是從蘋果電腦內建的字體簿開始找,對應到的英文是 font book,可以到應用程式列表中查看,或者直接用 command + space 尋找。

應用程式中也可以找到

打開字體簿後,可以看到很多字體。

預覽呈現出許多字體樣式可供選擇

下一步很簡單,對著想要使用的字體按下右鍵,這個步驟的目的是察看字體的全名,舉例來說,我最常用也最愛用的就是”Noto Sans CJK TC”,也就是「思源黑體 繁體中文」的意思。

對要使用的字體按下右鍵

按下右鍵跑出的選單中,確認引號中的內容,接著在語法中指定該字體即可,以下是範例程式碼:

  • ggplot 版本:
  • data.frame(a=1:10,b=2*(1:10)+1) %>%
      ggplot(aes(x = a, y = b)) + geom_point() +
      labs(title = "你好嗎") +
      theme(plot.title = element_text(family = "Noto Sans CJK TC Regular"))
  • base R 版本:
  • a=1:10
    b=2*(1:10)+1
    par(family = "Noto Sans CJK TC Regular")
    plot(a,b)
    title("你好嗎")

    如果在上面右鍵跑出的選單中,點擊「顯示於Finder」,就會跑出字體原始檔案的位置,這時候查看詳細資訊也可以看到字體的名稱喔!

    查看詳細資訊也能看到字體的名稱

    Windows

    跟在MAC系統中相似,畫圖時如果沒有指定合適的中文字體,圖表中的中文會自動採用其他字體,以下方的程式碼為例,實際執行時會顯示如下的
    warnings:

    #> Warning in grid.Call(C_textBounds, as.graphicsAnnot(x \(label), x\) x, x$y, : font family ‘測試字體’ not found, will use ‘wqy-microhei’ instead

    簡單來說,因為找不到 ‘測試字體’,所以改採 ‘wqy-microhei’ 代替。

    library(ggplot2)
    ggplot(data = data.frame(a=1:10,b=2*(1:10)+1), aes(x = a, y = b)) + 
      geom_point() +
      labs(title = "你好嗎") +
      theme(plot.title = element_text(family = "測試字體"))
    沒有指定合適的中文字體時會用其他字體代替

    想要顯示中文字體,必須找到正確的檔案路徑。哪裡可以看呢?蘋果電腦有字體簿,我的HP電腦則有「字型」。打開控制台,搜尋字型或者fonts,就可以看到了。

    控制台能夠找到字型

    打開字型後找到自己要使用的字型。

    找到想用的字型

    按右鍵點擊開啟,或者直接點兩下開啟。會跳出一個新的視窗,接著再對想用的類型例如粗、細等,按下右鍵然後選擇內容,就能找到路徑!

    找到路徑之後,就搞定了!不過,跟剛剛不一樣的是,在Windows當中,我會載入 library(showtext) ,接著用 showtext_auto() font_add() 這兩個函數。在 font_add() 中,要放入兩個參數,第一個是你想使用的字體名稱,可以自己取名,像是我在下方就省略“CJK”三個字母,第二個參數則是你想使用的字體的檔案路徑,也就是我們剛剛找到的那串內容、上圖當中的「位置」。

    library(ggplot2)
    library(showtext)
    showtext_auto() 
    font_add("Noto Sans TC Medium", regular = "C:\\Users\\cct\\AppData\\Local\\Microsoft\\Windows\\Fonts\\NotoSansCJKtc-Medium.otf")
    font_add("Noto Sans TC Regular", regular = "C:\\Users\\cct\\AppData\\Local\\Microsoft\\Windows\\Fonts\\NotoSansCJKtc-Regular.otf")
    font_add("Noto Sans TC Black", regular = "C:\\Users\\cct\\AppData\\Local\\Microsoft\\Windows\\Fonts\\NotoSansCJKtc-Black.otf")
    font_add("Noto Sans TC Bold", regular = "C:\\Users\\cct\\AppData\\Local\\Microsoft\\Windows\\Fonts\\NotoSansCJKtc-Bold.otf")

    只要先指定好字體名稱以及檔案路徑,畫圖時只要呼叫該名稱,就大功告成。

    按下右鍵跑出的選單中,確認引號中的內容,接著在語法中指定該字體即可,以下是範例程式碼:

  • ggplot 版本:
  • data.frame(a=1:10,b=2*(1:10)+1) %>%
      ggplot(aes(x = a, y = b)) + geom_point() +
      labs(title = "你好嗎") +
      theme(plot.title = element_text(family = "Noto Sans TC Medium"))
  • base R 版本:
  • a=1:10
    b=2*(1:10)+1
    par(family = "Noto Sans TC Medium")
    plot(a,b)
    title("你好嗎")

    在這篇文章中,我介紹了如何在R語言繪製圖表時呈現中文的方法,Windows和MAC的方法有些不同,但核心精神都是找到字體的位置或是名稱,希望對你有幫助。