R 语言可视化:字体设置与 Rprofile
2024-6-29
| 2024-6-29
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password

一、中文字体的设置

R 语言默认支持英文字体绘图。可以在 ggplot 作图中,将字体家族的参数改为 serif、sans 或 mono,来将字体设置为衬线字体、无衬线字体或等宽字体。其中衬线字体,就是我们常用的 Times New Roman,而非衬线字体则是 Arial,等宽字体则为 Courier New。
例如下面这段绘制散点图的代码。
这段代码使用 R 语言自带的美国中东部城市数据集,展示了小型城市(人口数量低于20万人的城市)中,城市面积(area)与城市人口(poptotal)的关系,并基于城市所在的州(state)来着色。最后,通过 theme_classic 来声明使用的主题,并控制了绘图中文字的大小为12、字体为 serif,也就是 Times New Roman。不难发现,在全英文的环境下,everything is fine。
不过,有时图片中也会有些中文,例如我们希望给图片加个标题。
ggplot 的绘图思想,与 Photoshop 是一致的,简单来说就是认为图像是由一层一层的图层叠加而成的。也因此,与之前相比,我们只需要新加入一个 labs 函数,添加标题的图层即可。不过,标题通常需要大一些,并放置在图像的左上角。因此,通过 theme 函数中的 plot.title 参数,控制了标题的大小为 20,位置在左上端。
然而,图像绘制的结果发现,左上端并没有出现“散点图”的标题字样,反而出现了三个“□”。这是由于,serif 字体,也就是 Times New Roman 字体中,仅有英文字符,并没有中文字符。因此,当我们绘制带有中文的图像时,就无法使用 R 自带的三个字体,需要自定义使用其他中文字体。
目前,字体安装格式主要有 ttf、otf 等几种。当我们需要安装一个新的字体时,双击打开这些文件,即可安装到系统中。R 语言中也类似,假如我们希望使用某个独特的字体来绘图,则声明字体文件的位置,让 R 绘图时调用这些文件即可。这一系列步骤,使用 R 中的 showtext 包即可完成。假设,我们的字体文件存储 Windows 系统的 D 盘中,一个名为 Fonts 的文件夹内。在这个文件夹中,我们存储了一个常用的中文绘图字体——楷体的普通字体和加粗字体格式,名称分别为 STKaiti-Regular.ttf 和 STKaiti-Black.ttf。这些字体可以在我的网盘中找到。
在上面这段代码中,我们首先导入了 tidyverseshowtext 包。showtext_auto,确保了 showtext 包总是被启用。随后,通过 font_add 函数,添加了一个名为 “Kaiti” 的字体,并声明这个字体的普通形式(regluar)对应于字体文件夹中的 STKaiti-Regular.ttf,而加粗形式(bold)对应于 STKaiti-Black.ttf 文件。在作图代码中,则将 theme_classic 中的 serif 修改为了 Kaiti,以调用我们设置的新字体来作图。这时,“散点图”字样则通过正确的楷体字形显示在了图像的左上角。
需要说明的是,font_add 以下面这个格式写也是可以的。将字体文件夹的路径 D:/Fonts,定义为了 font_path。并通过 file.path, 将文件夹路径与文件名称拼接,避免我们在导入多个字形时或是迁移字体文件时,需要多次输入或修改文件路径。另外,将 font_path 定义为 C:/Windows/Fonts 则可以调用系统中的相应字体。
最后,我们通常需要将图片保存,通过 ggsave 即可存储我们最新绘制的图片。
参数中,我们将图片保存为名为“Scatter_Plot.png”的图片文件, device = png 则声明了使用 png 驱动器存储。类似的,还可以存储为 pdf、jpeg、svg 等等。如果不声明 device,则会根据文件的名称自动猜测。我们将图片的精度 dpi 定义为 800,以确保存储的图片格式是高清的。并将图片的长、宽分别定义为 5 和 8。
不过在保存时,不难发现字体的大小与图片的大小比例失调了,这是由于字体没有按 800 dpi 的精度绘制造成的,通过 showtext_opts(dpi = 800),将字体文件的 dpi 与图片文件的 dpi 相匹配即可。最终,完整的代码如下所示。

二、自定义 Rprofile 文件

总有一些代码是频繁需要调用的,例如导入字体文件、设置小数点位数等等,这些代码需要频繁的启用,几乎在每次使用 R 时都需要运行。这时我们可以将这些代码设置进入 Rprofile 文件,以确保在每次启用 R 时,自动地运行它们。
值得注意的是,放入 Rprofile 的代码,不会在 R Markdown、Quarto 等对可重复性严格要求的代码格式中运行。对于我们常用的 Rscript 来说,很可能脱离了你的系统环境,别人运行时会报错或输出结果不一致。因此,对于将哪些代码放入 Rprofile 的抉择需要保持谨慎。
创建 Rprofile 文件非常简单,前往相应的文件目录,创建一个 TXT 文件,随后将其更名为 .Rprofile 即可。
不同系统对应的具体目录路径是:
  • Windows:C:/Users/用户名/Documents
  • macOS:/Users/用户名
  • Linux:/home/用户名
对于我而言,常用的设置主要有以下几类:
  • 基础设置
    • encoding 将字体文件的保存编码设置为 UTF-8,这是目前最广泛使用的编码格式。但在中文 Windows 系统中,默认编码格式是 GBK,这可能导致英文环境中打开代码会乱码。
    • digits = 6 声明小数点保存到 6 位数即可。
    • repos 声明下载安装新的包时,默认使用清华大学的镜像目录,以加快下载速度。
    • Sys.setenv 将报错、警告等信息设置为英文,方便阅读。
  • 包安装路径设置
    • 将 R 语言的安装目录设置到自定义的文件夹。避免 R 更新版本之后,原有已安装的包需要重装。
  • 字体设置
    • 添加字体。首先导入 showtext 及其依赖包。其实导入 showtext 时会自动导入 sysfontsshowtextdb 两个依赖包,不过会提示信息告知你导入了这两个包。为了避免提示,我选择自己手动导入一下。然后就是重复上文提到的添加字体的步骤。
    • 我常使用的英文绘图字体是 Helvetica,中文绘图字体是楷体。Helvetica 和 Arial 是大多国际学术期刊要求使用的英文字体,也是最经典、适合屏幕阅读的英文字体。因此在绘制英文字体时,建议选用此两类字体。中文期刊中,一部分要求使用楷体,一部分要求使用宋体(STSongti),也有要求使用其他字体绘制的,根据需要使用即可。此外,中文传统的书写习惯是没有斜体字的,斜体是西文的书写习惯。因此,大多数中文字体并没有 italic 和 bolditalic 的字形。若确需使用斜体的话,正确的设置是将斜体设置为另一种字体来区分。而大多数英文字体会带有对应的斜体字形。
  • VSCode 设置
    • 自动索引 VSCode 中关于 R 的设置文件,方便在 VSCode 中使用 R。
若只在 Windows 系统中使用的话,汇总的代码如下所示。注意,需要对应的修改 libr_pathfont_path 两个路径。若是在 macOS 中使用,则修改 file_path 即可。
倘若在多个系统环境中使用,则通过条件语句判断即可。汇总代码如下所示。
  • R-Language
  • 安装和设置 R 语言基于 VSCode 的代码环境配置
    • Cusdis
    目录