:R語言 | showtext-字體設置-佳作欣賞免费ppt模版下载-道格办公

R語言 | showtext-字體設置

t('Hello, World!', family = 'Arial')

一個想法


你有沒有想過直接在R繪圖時更改字體?而不是在畫完後再在AI或者PS里手動修改?

一個測試


在R中執行如下代碼:

  1. plot.new( )

  2. text(0.5, 1, 'test', cex=3)

  3. text(0.5, 0.9, 'test', cex=3, family='Courier New' )

  4. text(0.5, 0.8, 'test', cex=3, family='Courier Old' )

  5. text(0.5, 0.7, '中文', cex=3)

  6. text(0.5, 0.6, 'test', cex=3, family='華文行楷' )

可見,除了人為設置的不存在的字體 Courier Old 報出警告(並使用上一次實際使用的字體繪製):

Warning messages:1: In text.default(0.5, 0.5, 'test', cex = 3, family = 'Courier Old') :字體家族'Courier Old'沒有字體

中文也未能正常顯示,而且華文行楷字體,也無法找到:

Warning messages:1: In text.default(0.5, 0.6, 'test', cex = 3, family = '華文行楷') :字體家族'華文行楷'沒有字體

那麼上圖能使用pdf() 函數原模原樣的保存在pdf文件中嗎?

實際上,只有第一個test可以正常保存(因為沒有預設字體,而使用默認字體 Helvetica),其他相繼報錯:

Error in text.default(0.5, 0.9, 'test', cex = 3, family = 'Courier New') :

字體類別出錯

此外: Warning messages:1: In text.default(0.5, 0.9, 'test', cex = 3, family = 'Courier New') :PostScript字體數據庫裡找不到'Courier New'這個字體系列

  1. names(pdfFonts())    # pdf圖形設備可用字體

https://stackoverflow.com/questions/50431809/extra-fonts-in-pdffonts-in-r

所以,現在存在的問題主要有3個:

1、中文無法顯示

2、中文的字體無法顯示(可用字體有限)

3、保存pdf等格式文件時出錯或字體被轉為默認字體

showtext

showtext包可以完美解決上述問題。其實現原理,簡單來說是將文字轉換為圖形,然後再使用系統默認的圖形設備(pdf、png、jpeg、tif等)去繪製圖形。

showtext包雖然可以使用更豐富的字體,但是也限於系統中已經存在的字體,所以在使用之前可以先查看該字體是否存在:

  1. library(showtext)

  2. font_paths()    # 系統中字體的查找路徑

  3. font_files()    # 已存在的可用字體

使用:
  1. showtext_auto(enable = TRUE)  # 打開showtext

  2. # 重新打開一個繪圖界面進行測試

  3. plot(NULL, type='n', axes=FALSE, ann=FALSE, xlim=c(0,1), ylim=c(0 ,1))    

  4. text(0.4, 0.9, 'test', cex=3)

  5. text(0.4, 0.8, '中文', cex=3)

此時,可見中英文均可正常顯示!如果想進一步設置字體的話,則需要首先使用font_add 函數將字體加載到R中:

  1. font_add('儷黑', '儷黑Pro.ttf')    # 從字體庫中導入'儷黑Pro.ttf',並將其重命名為'儷黑'

  2. text(0.3, 0.7, '中文', cex=3, family='儷黑' )    # 設置字體

  3. font_add('Times New Roman', 'Times New Roman.ttf')

  4. text(0.5, 0.7, 'test', cex=3, family='Times New Roman ')

對於庫中font.paths()不存在的字體,比如華文行楷,則可以在網上下載(一般是.ttf/.ttc/.otf格式)

http://www.fonts.net.cn/font-search-result-984339101-1.html,並將其存儲於font.paths()文件夾下,然後使用即可:

  1. font_add('華文行楷', 'HuaWenXingKai-1.ttf')

  2. text(0.4, 0.6, '中文', cex=3, family='華文行楷' )

當然,如果想對多個文本整體更改字體,可以不用在每個text函數中單獨設置,直接在par中設置即可:

  1. font_add('TNR', 'Times New Roman.ttf')

  2. par(family = 'TNR')

  3. text(0.3, 0.5, 'test', col = 'darkblue', cex=3< /span>)

  4. text(0.5, 0.5, 'test', cex=3)

如果是對 一行文本設置不同的顯示效果 呢?

比如,對於文本 log-rank p = 0.01,此處將其設置為Courier New字體,並把

p = 0.01設置為加粗斜體:

  1. font_add('CN', 'Courier New.ttf')

  2. font_add('CNBI', 'Courier New Bold Italic.ttf')

  3. text(0.42, 0.3, 'log-rank', cex=1, family = 'CN ')

  4. text(0.58, 0.3, 'p = 0.01', cex=1, family = 'CNBI ')

既然不同字體的底層是都是轉換為基礎圖形的。那麼一些特別的符號或圖標或許也可以當做文字繪製出來!

https://www.wfonts.comhttp://www.fontspace.com

  1. font_add('PF', 'Packaging Funny.otf')

  2. font_add('HFS', 'Hand Faces St.ttf')

  3. font_add('GATB', 'go around the books - arrows.ttf')

  4. text(0.7, 0.6, 'k', cex=2, family = 'GATB'< /span>)

  5. text(0.8, 0.48, '微信公眾號: 生信控', cex=1.6, family='華文行楷')

  6. text(0.8, 0.4, 'SXK', cex=2, family = 'PF'< /span>)

  7. text(0.9, 0.4, 'p', cex=2, col = 'darkslateblue'< /span>, family = 'HFS')

然後,我們將上示代碼套在pdf( 'ceshi')dev.off() 之間就可以將繪圖結果完美的保存在pdf文件中了:

文章為用戶上傳,僅供非商業瀏覽。發布者:Lomu,轉轉請註明出處: https://www.daogebangong.com/zh-Hant/articles/detail/R%20language%20%20showtextfont%20setting.html

(810)
打賞 支付宝扫一扫 支付宝扫一扫
single-end

相關推薦