在 R 中更改图形的字体

Posted

技术标签:

【中文标题】在 R 中更改图形的字体【英文标题】:Changing Fonts for Graphs in R 【发布时间】:2015-02-25 15:50:40 【问题描述】:

在我的研究中,我使用 R 生成各种图表。我看到大多数图表都带有各种大小的 Sans Serif 字体。

如何将图表中的所有文本(x 标签、y 标签、标题、图例等)更改为统一字体,例如Times New Roman,12pt,粗体?

【问题讨论】:

您使用的是基础绘图还是像 ggplot2 这样的专用绘图包? 【参考方案1】:

您可以使用extrafont 包。

install.packages("extrafont")
library(extrafont)
font_import()
loadfonts(device="win")       #Register fonts for Windows bitmap output
fonts()                       #vector of font family names
##  [1] "Andale Mono"                  "AppleMyungjo"                
##  [3] "Arial Black"                  "Arial"                       
##  [5] "Arial Narrow"                 "Arial Rounded MT Bold"  

library(ggplot2)
data(mtcars)
ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point() +     
  ggtitle("Fuel Efficiency of 32 Cars") +
  xlab("Weight (x1000 lb)") + ylab("Miles per Gallon") +
  theme_bw() +
  theme(text=element_text(family="Times New Roman", face="bold", size=12)) #Times New Roman, 12pt, Bold
#example taken from the Github project page

注意:使用extrafont 包,您还可以将这些字体嵌入到PDF 和EPS 文件中(在R 中绘制并导出为PDF/EPS)。您也可以直接创建数学符号(参见下图中的数学方程式),通常使用 TeX 创建。更多信息herehere。另请查看github project page

另请查看this 答案,该答案描述了使用extrafont 包创建xkcd 样式图。

【讨论】:

【参考方案2】:

您可以使用windowsFonts() 命令和plot 中的family 选项将Windows 中的字体更改为Times New Roman:

x = seq(1,10,1)
y = 1.5*x
windowsFonts(A = windowsFont("Times New Roman"))
plot(x, y,
  family="A",
  main = "title",
  font=2)

粗体字来自font=2。至于大小,见?cex()。另外,请参见此处:http://www.statmethods.net/advgraphs/parameters.html

【讨论】:

此解决方案仅适用于 Times New Roman 字体。我正在尝试使用此解决方案将字体更改为 Times New Roman 以外的字体,但无论我在字体中输入什么内容都不会更改。如果一个人想要 Times New Roman 以外的字体,他们应该怎么做? windowsFonts(A = windowsFont("Helvetica")) plot(forecast(fit, 5), xlab="Year", ylab="Passengers", main="嘉年华游轮:乘客量(在千)", col.main ="darkgreen", xlim = c(2005, 2025), ylim = c(7000, 16000), family="A", las="0")【参考方案3】:

这是使用WindowsFonts(...)ggplot 解决方案

windowsFonts(Times=windowsFont("Times New Roman"))
library(ggplot2)
ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point() +
  ggtitle("Fuel Efficiency of 32 Cars") +
  xlab("Weight (x1000 lb)") + ylab("Miles per Gallon") +
  theme_bw() +
  theme(text=element_text(family="Times", face="bold", size=12)) #Times New Roman, 12pt, Bold

如您所见,文字确实是 Times New Roman。

主要思想是,无论你在 R 内部给字体起什么名字,使用

windowsFonts(name=windowsFont("system name"))

你应该使用来引用字体

theme(text=element_text(family="name",...),...)

【讨论】:

【参考方案4】:

2020 年更新 现在可以通过使用ggtext 包来解决这个问题,例如:

install.packages(ggtext)

plot <- plot + theme(
  legend.text = ggtext::element_markdown(family = 'Times', face='bold')
)

此外,您可以使用降价来补充您的情节文本。我体验过ggtextextrafont 更简单、更安全。

【讨论】:

以上是关于在 R 中更改图形的字体的主要内容,如果未能解决你的问题,请参考以下文章

在 R 图中指定字体大小

Windows 10 更改系统文字大小

如何在 r 中更改和/或分离图形图例中的组件?

如何从图形的整数更改 r 中列的名称

R图中的字体

R基础图形的默认文本大小是多少?