【R语言学习笔记】| 关于字体设置的那些事儿!你一定要知道!

文摘   科技   2024-06-16 22:09   北京  

本笔记为个人学习整理(图文版),仅供参考。主要参考内容在文末附有链接。如有侵权,请联系删除。

操作环境:

  • R版本:R version 4.4.0
  • RStudio版本:RStudio 2024.04.2 Build 764
  • 操作系统:Windows 11 23h2

本文主要内容:

  • 英文字体设置
    • 基础图形系统
    • ggplot2绘图系统
  • 中文字体设置
    • 基础图形系统
    • ggplot2绘图系统
  • 导出PDF文件

Hello!大家好呀,今天主要来学习如何设置图形中的字体样式

之前的一些基础笔记嗷:

这两篇笔记主要介绍了R语言的基础知识,以及绘图过程中图形的美化操作

无论是毕业论文还是学术期刊,都对图表的字体样式有着一定的要求。比如,有的期刊要求字体为Times New Roman,有的期刊要求字体为Arial等。

那么,如何设置绘图过程中字体的样式呢?下面就让我们一起学习一下。

代码注释由GPT产生

英文字体设置

基础图形系统

在R的基础图形系统中,可以使用par()函数和family参数来设置字体家族(如Times New RomanArial等)。如果系统中没有安装所需字体,可以使用extrafont包加载更多字体。

# 安装并加载extrafont包
install.packages("extrafont")
library(extrafont)

# 导入系统字体
font_import()

# 加载字体
loadfonts(device="win")  # Windows系统
loadfonts(device="pdf")  # PDF设备

# 使用Times New Roman字体
jpeg("example1_times_new_roman.jpg", width = 800, height = 500, res = 150)
par(family="Times New Roman")
plot(1:10, main="Title in Times New Roman", xlab="X Axis", ylab="Y Axis")
dev.off()

# 使用Arial字体
jpeg("example1_arial.jpg", width = 800, height = 500, res = 150)
par(family="Arial")
plot(1:10, main="Title in Arial", xlab="X Axis", ylab="Y Axis")
dev.off()

Figure 1

Figure 2

解释:

  • font_import(): 从系统中导入所有可用字体,并将它们注册到R中。如果不执行这句代码,R将无法识别系统中的字体,后续代码中设置字体会失败或无法找到指定字体。
  • loadfonts(device="win"): 加载字体到Windows系统设备。如果不执行这句代码,RWindows系统上生成的图形将无法使用导入的字体。
  • loadfonts(device="pdf"): 加载字体到PDF设备。如果不执行这句代码,R在生成PDF文件时将无法使用导入的字体。

ggplot2绘图系统

ggplot2中,可以使用theme()函数中的element_text()来设置字体。

# 导入 ggplot2 和 tibble 包
library(ggplot2)
library(tidyverse)
library(RColorBrewer)
library(extrafont)

font_import()

loadfonts(device = "win")
loadfonts(device = "pdf")

colorgroup <- brewer.pal(3"Set1")

# 创建一个示例数据集
set.seed(123
data <- tibble(
  group = rep(c("A""B""C"), each = 100),
  value1 = c(rnorm(100), rnorm(100, mean = 1.5), rnorm(100, mean = 2)),
  value2 = c(rnorm(100), rnorm(100, mean = 1.5), rnorm(100, mean = 2)),
  value3 = c(rnorm(100), rnorm(100, mean = 1.5), rnorm(100, mean = 2))
)

data

# 使用 ggplot2 绘制小提琴图
p <- ggplot(data, aes(x = group, y = value1, fill = group)) +
  geom_violin() +
  geom_boxplot(width = 0.1, fill = "white", color = "black", alpha = 0.5) +
  scale_fill_manual(values = colorgroup)+
  theme_classic() +
  labs(x = "Group", y = "Value", title = "Violin Plot - Value1", fill = "Group") +
  theme(
    text = element_text(family = "Times New Roman"
  )

p

ggsave("ggplot_font_times.jpg", width = 8, height = 5, dpi = 600)

Figure 3

中文字体设置

基础图形系统

对于中文字体,常用的有宋体(SimSun)黑体(SimHei)等。设置中文字体时,同样可以使用extrafont包来加载更多字体。

library(extrafont)

# 加载字体
loadfonts(device="win")  # Windows系统
loadfonts(device="pdf")  # PDF设备

# 使用SimSun字体
jpeg("example1_SimSun.jpg", width = 800, height = 500, res = 150)
par(family="SimSun")
plot(1:10, main="标题(宋体)", xlab="X轴(宋体)", ylab="Y轴(宋体)")
dev.off()

# 使用SimHei字体
jpeg("example1_SimHei.jpg", width = 800, height = 500, res = 150)
par(family="SimHei")
plot(1:10, main="标题(黑体)", xlab="X轴(黑体)", ylab="Y轴(黑体)")
dev.off()

Figure 4

Figure 5

ggplot2绘图系统

# 导入 ggplot2 和 tibble 包
library(ggplot2)
library(tidyverse)
library(RColorBrewer)
library(extrafont)

#font_import()

loadfonts(device = "win")
loadfonts(device = "pdf")

colorgroup <- brewer.pal(3"Set1")

# 创建一个示例数据集
set.seed(123
data <- tibble(
  group = rep(c("A""B""C"), each = 100),
  value1 = c(rnorm(100), rnorm(100, mean = 1.5), rnorm(100, mean = 2)),
  value2 = c(rnorm(100), rnorm(100, mean = 1.5), rnorm(100, mean = 2)),
  value3 = c(rnorm(100), rnorm(100, mean = 1.5), rnorm(100, mean = 2))
)

data

# 使用 ggplot2 绘制小提琴图
p <- ggplot(data, aes(x = group, y = value1, fill = group)) +
  geom_violin() +
  geom_boxplot(width = 0.1, fill = "white", color = "black", alpha = 0.5) +
  scale_fill_manual(values = colorgroup)+
  theme_classic() +
  labs(x = "Group(组)", y = "Value(值)", title = "Violin Plot - Value1", fill = "Group") +
  theme(
    text = element_text(family = "SimSun", size = 18
  )

p

ggsave("ggplot_SimSun.jpg", width = 8, height = 5, dpi = 600)

Figure 6

Figure 7

无论是英文还是中文字体,都可以通过以下参数设置不同的样式:face:字体样式(plain=普通,bold=加粗,italic=斜体,bold.italic=加粗斜体)

关于extrafont 包的一些使用技巧

使用 font_import() 函数来导入系统中的字体。运行一次即可,它会扫描系统字体目录并注册这些字体供 R 使用。

使用 fonts() 函数可以查看已经成功导入的字体列表。

导出PDF文件

导出PDF文件,经常会出各种各样的错误,这里推荐使用Cairo包来导出PDF文件。

cairo_pdf() 函数用于创建 PDF 文件,并指定要绘制的图形。与普通的 pdf() 函数相比,cairo_pdf() 通常在处理字体和图形输出时更为可靠。

# 导入 ggplot2 和 tibble 包
library(ggplot2)
library(tidyverse)
library(RColorBrewer)
library(extrafont)
library(Cairo)

loadfonts(device = "win")
loadfonts(device = "pdf")

colorgroup <- brewer.pal(3"Set1")

# 创建一个示例数据集
set.seed(123
data <- tibble(
  group = rep(c("A""B""C"), each = 100),
  value1 = c(rnorm(100), rnorm(100, mean = 1.5), rnorm(100, mean = 2)),
  value2 = c(rnorm(100), rnorm(100, mean = 1.5), rnorm(100, mean = 2)),
  value3 = c(rnorm(100), rnorm(100, mean = 1.5), rnorm(100, mean = 2))
)

data

# 使用 ggplot2 绘制小提琴图

p <- ggplot(data, aes(x = group, y = value1, fill = group)) +
  geom_violin() +
  geom_boxplot(width = 0.1, fill = "white", color = "black", alpha = 0.5) +
  scale_fill_manual(values = colorgroup)+
  theme_classic() +
  labs(x = "Group(组)", y = "Value(值)", title = "Violin Plot - Value1", fill = "Group") +
  theme(
    text = element_text(family = "Times New Roman", size = 18
  )

p

p2 <- p + 
  labs(x = "分组", y = "值", title = "小提琴图", fill = "分组") +
  theme(
    text = element_text(family = "SimSun", size = 18),
    axis.text = element_text(family = "Times New Roman")
  )

cairo_pdf("ggplot_demo.pdf")
print(p)
print(p2)
dev.off()

关于导出PDF文件的一些注意事项(重要):

请针对合适的字体使用合适的字体样式。例如:对于中文字体,请使用黑体、宋体等,而不能使用Times New Roman等。 它不等同于在word中先设置中文字体,然后再设置英文字体样式(Times New Roman)。


主要参考:

extrafont包帮助文档

本文为个人学习笔记,整理过程难免有误。如有错误,欢迎指正。仅供个人学习使用,如有侵权,请联系删除

可凡的学习笔记本
在读硕士生,R、Python爱好者
 最新文章