更改ggplot2中的字体
Changing fonts in ggplot2
曾几何时,我使用 windowsFonts(Times=windowsFont("TT Times New Roman"))
更改了我的 ggplot2
字体。现在,我无法摆脱它。
在尝试在 ggplot2
theme()
中设置 family=""
时,我似乎无法生成字体更改,因为我使用不同的字体系列编译下面的 MWE。
library(ggplot2)
library(extrafont)
loadfonts(device = "win")
a <- ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point() +
ggtitle("Fuel Efficiency of 32 Cars") +
xlab("Weight (x1000 lb)") + ylab("Miles per Gallon") +
theme(text=element_text(size=16,
# family="Comic Sans MS"))
# family="CM Roman"))
# family="TT Times New Roman"))
# family="Sans"))
family="Serif"))
print(a)
print("Graph should have refreshed")
R 正在返回警告 font family not found in Windows font database
,但我正在关注一个教程(如果我能再次找到它,我将在此处更新 link)说这是正常的,而不是问题。此外,不知何故这在某一时刻起作用,因为我的图表曾经使用过一些 arial 或 helvitica 字体。我认为即使在初始迁移期间,这也一直是一个当前警告。
更新
当我 运行 windowsFonts()
我的输出是
$serif [1] "TT Times New Roman"
$sans [1] "TT Arial"
$mono [1] "TT Courier New"
但是,这是在我 运行 font_import()
之后,所以我只能得出结论,我的字体没有保存在正确的位置。 运行 font_import()
请求实际加载库的代码:
LocalLibraryLocation <- paste0("C:\Users\",Sys.getenv("USERNAME"),"\Documents","\R\win-library\3.2");
.libPaths(c(LocalLibraryLocation, .libPaths()))
我想你只是错过了一个初始化步骤。
您可以通过命令windowsFonts()
查看您可用的字体。例如,当我开始看这个时,我的看起来像这样:
> windowsFonts()
$serif
[1] "TT Times New Roman"
$sans
[1] "TT Arial"
$mono
[1] "TT Courier New"
像这样安装包 extraFont 和 运行 font_import
之后(大约花了 5 分钟):
library(extrafont)
font_import()
loadfonts(device = "win")
我还有很多可用的 - 有争议的太多了,肯定太多了,无法在这里列出。
然后我试了你的代码:
library(ggplot2)
library(extrafont)
loadfonts(device = "win")
a <- ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point() +
ggtitle("Fuel Efficiency of 32 Cars") +
xlab("Weight (x1000 lb)") + ylab("Miles per Gallon") +
theme(text=element_text(size=16, family="Comic Sans MS"))
print(a)
产生这个:
更新:
您可以使用以下代码片段找到 element_text
的 family
参数所需的字体名称:
> names(wf[wf=="TT Times New Roman"])
[1] "serif"
然后:
library(ggplot2)
library(extrafont)
loadfonts(device = "win")
a <- ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point() +
ggtitle("Fuel Efficiency of 32 Cars") +
xlab("Weight (x1000 lb)") + ylab("Miles per Gallon") +
theme(text=element_text(size=16, family="serif"))
print(a)
产量:
另一种选择是使用支持更多类型字体(TrueType、OpenType、Type 1、网络字体等)和更多图形设备的showtext
包,避免使用外部软件,如Ghostscript。
# install.packages('showtext', dependencies = TRUE)
library(showtext)
导入一些 Google 字体
# https://fonts.google.com/featured/Superfamilies
font_add_google("Montserrat", "Montserrat")
font_add_google("Roboto", "Roboto")
从当前搜索路径加载字体到showtext
# Check the current search path for fonts
font_paths()
#> [1] "C:\Windows\Fonts"
# List available font files in the search path
font_files()
#> [1] "AcadEref.ttf"
#> [2] "AGENCYB.TTF"
#> [428] "pala.ttf"
#> [429] "palab.ttf"
#> [430] "palabi.ttf"
#> [431] "palai.ttf"
# syntax: font_add(family = "<family_name>", regular = "/path/to/font/file")
font_add("Palatino", "pala.ttf")
font_families()
#> [1] "sans" "serif" "mono" "wqy-microhei"
#> [5] "Montserrat" "Roboto" "Palatino"
## automatically use showtext for new devices
showtext_auto()
绘图:需要打开 Windows 图形设备,因为 showtext
不能很好地与 RStudio 内置图形设备一起使用
# https://github.com/yixuan/showtext/issues/7
# https://journal.r-project.org/archive/2015-1/qiu.pdf
# `x11()` on Linux, or `quartz()` on Mac OS
windows()
myFont1 <- "Montserrat"
myFont2 <- "Roboto"
myFont3 <- "Palatino"
library(ggplot2)
a <- ggplot(mtcars, aes(x = wt, y = mpg)) +
geom_point() +
ggtitle("Fuel Efficiency of 32 Cars") +
xlab("Weight (x1000 lb)") + ylab("Miles per Gallon") +
theme(text = element_text(size = 16, family = myFont1)) +
annotate("text", 4, 30, label = 'Palatino Linotype',
family = myFont3, size = 10) +
annotate("text", 1, 11, label = 'Roboto', hjust = 0,
family = myFont2, size = 10)
## On-screen device
print(a)
## Save to PNG
ggsave("plot_showtext.png", plot = a,
type = 'cairo',
width = 6, height = 6, dpi = 150)
## Save to PDF
ggsave("plot_showtext.pdf", plot = a,
device = cairo_pdf,
width = 6, height = 6, dpi = 150)
## turn showtext off if no longer needed
showtext_auto(FALSE)
Edit:在 RStudio 中使用 showtext
的另一种解决方法。 运行 R 会话开始时的以下代码 (source)
trace(grDevices::png, exit = quote({
showtext::showtext_begin()
}), print = FALSE)
聚会迟到了,但对于希望在 shinyapps.io 上的 shiny
应用程序中向其 ggplots
添加自定义字体的人来说可能会感兴趣。
您可以:
这导致 app.R
文件中的以下上部部分:
dir.create('~/.fonts')
file.copy("www/IndieFlower.ttf", "~/.fonts")
system('fc-cache -f ~/.fonts')
可以找到完整的示例应用 。
如果您不想安装任何新东西,一个简单的回答
更改绘图中的所有字体 plot + theme(text=element_text(family="mono"))
其中 mono
是您选择的字体。
默认字体选项列表:
- 单声道
- 没有
- 衬线体
- 快递
- Helvetica
- 次
- 前卫
- 书人
- Helvetica-Narrow
- 新世纪教科书
- 帕拉蒂诺
- URW哥特式
- URW书人
- NimbusMon
- URWHelvetica
- NimbusSan
- NimbusSanCond
- 世纪中学
- URW帕拉迪奥
- URWTimes
- NimbusRom
R 的字体覆盖率不高,正如 指出的那样,R 对常用字体使用不同的名称。
This page 详细介绍默认字体。
全局更改 ggplot2 图的字体。
theme_set(theme_gray(base_size = 20, base_family = 'Font Name' ))
曾几何时,我使用 windowsFonts(Times=windowsFont("TT Times New Roman"))
更改了我的 ggplot2
字体。现在,我无法摆脱它。
在尝试在 ggplot2
theme()
中设置 family=""
时,我似乎无法生成字体更改,因为我使用不同的字体系列编译下面的 MWE。
library(ggplot2)
library(extrafont)
loadfonts(device = "win")
a <- ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point() +
ggtitle("Fuel Efficiency of 32 Cars") +
xlab("Weight (x1000 lb)") + ylab("Miles per Gallon") +
theme(text=element_text(size=16,
# family="Comic Sans MS"))
# family="CM Roman"))
# family="TT Times New Roman"))
# family="Sans"))
family="Serif"))
print(a)
print("Graph should have refreshed")
R 正在返回警告 font family not found in Windows font database
,但我正在关注一个教程(如果我能再次找到它,我将在此处更新 link)说这是正常的,而不是问题。此外,不知何故这在某一时刻起作用,因为我的图表曾经使用过一些 arial 或 helvitica 字体。我认为即使在初始迁移期间,这也一直是一个当前警告。
更新
当我 运行 windowsFonts()
我的输出是
$serif [1] "TT Times New Roman"
$sans [1] "TT Arial"
$mono [1] "TT Courier New"
但是,这是在我 运行 font_import()
之后,所以我只能得出结论,我的字体没有保存在正确的位置。 运行 font_import()
请求实际加载库的代码:
LocalLibraryLocation <- paste0("C:\Users\",Sys.getenv("USERNAME"),"\Documents","\R\win-library\3.2");
.libPaths(c(LocalLibraryLocation, .libPaths()))
我想你只是错过了一个初始化步骤。
您可以通过命令windowsFonts()
查看您可用的字体。例如,当我开始看这个时,我的看起来像这样:
> windowsFonts()
$serif
[1] "TT Times New Roman"
$sans
[1] "TT Arial"
$mono
[1] "TT Courier New"
像这样安装包 extraFont 和 运行 font_import
之后(大约花了 5 分钟):
library(extrafont)
font_import()
loadfonts(device = "win")
我还有很多可用的 - 有争议的太多了,肯定太多了,无法在这里列出。
然后我试了你的代码:
library(ggplot2)
library(extrafont)
loadfonts(device = "win")
a <- ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point() +
ggtitle("Fuel Efficiency of 32 Cars") +
xlab("Weight (x1000 lb)") + ylab("Miles per Gallon") +
theme(text=element_text(size=16, family="Comic Sans MS"))
print(a)
产生这个:
更新:
您可以使用以下代码片段找到 element_text
的 family
参数所需的字体名称:
> names(wf[wf=="TT Times New Roman"])
[1] "serif"
然后:
library(ggplot2)
library(extrafont)
loadfonts(device = "win")
a <- ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point() +
ggtitle("Fuel Efficiency of 32 Cars") +
xlab("Weight (x1000 lb)") + ylab("Miles per Gallon") +
theme(text=element_text(size=16, family="serif"))
print(a)
产量:
另一种选择是使用支持更多类型字体(TrueType、OpenType、Type 1、网络字体等)和更多图形设备的showtext
包,避免使用外部软件,如Ghostscript。
# install.packages('showtext', dependencies = TRUE)
library(showtext)
导入一些 Google 字体
# https://fonts.google.com/featured/Superfamilies
font_add_google("Montserrat", "Montserrat")
font_add_google("Roboto", "Roboto")
从当前搜索路径加载字体到showtext
# Check the current search path for fonts
font_paths()
#> [1] "C:\Windows\Fonts"
# List available font files in the search path
font_files()
#> [1] "AcadEref.ttf"
#> [2] "AGENCYB.TTF"
#> [428] "pala.ttf"
#> [429] "palab.ttf"
#> [430] "palabi.ttf"
#> [431] "palai.ttf"
# syntax: font_add(family = "<family_name>", regular = "/path/to/font/file")
font_add("Palatino", "pala.ttf")
font_families()
#> [1] "sans" "serif" "mono" "wqy-microhei"
#> [5] "Montserrat" "Roboto" "Palatino"
## automatically use showtext for new devices
showtext_auto()
绘图:需要打开 Windows 图形设备,因为 showtext
不能很好地与 RStudio 内置图形设备一起使用
# https://github.com/yixuan/showtext/issues/7
# https://journal.r-project.org/archive/2015-1/qiu.pdf
# `x11()` on Linux, or `quartz()` on Mac OS
windows()
myFont1 <- "Montserrat"
myFont2 <- "Roboto"
myFont3 <- "Palatino"
library(ggplot2)
a <- ggplot(mtcars, aes(x = wt, y = mpg)) +
geom_point() +
ggtitle("Fuel Efficiency of 32 Cars") +
xlab("Weight (x1000 lb)") + ylab("Miles per Gallon") +
theme(text = element_text(size = 16, family = myFont1)) +
annotate("text", 4, 30, label = 'Palatino Linotype',
family = myFont3, size = 10) +
annotate("text", 1, 11, label = 'Roboto', hjust = 0,
family = myFont2, size = 10)
## On-screen device
print(a)
## Save to PNG
ggsave("plot_showtext.png", plot = a,
type = 'cairo',
width = 6, height = 6, dpi = 150)
## Save to PDF
ggsave("plot_showtext.pdf", plot = a,
device = cairo_pdf,
width = 6, height = 6, dpi = 150)
## turn showtext off if no longer needed
showtext_auto(FALSE)
Edit:在 RStudio 中使用 showtext
的另一种解决方法。 运行 R 会话开始时的以下代码 (source)
trace(grDevices::png, exit = quote({
showtext::showtext_begin()
}), print = FALSE)
聚会迟到了,但对于希望在 shinyapps.io 上的 shiny
应用程序中向其 ggplots
添加自定义字体的人来说可能会感兴趣。
您可以:
这导致 app.R
文件中的以下上部部分:
dir.create('~/.fonts')
file.copy("www/IndieFlower.ttf", "~/.fonts")
system('fc-cache -f ~/.fonts')
可以找到完整的示例应用
如果您不想安装任何新东西,一个简单的回答
更改绘图中的所有字体 plot + theme(text=element_text(family="mono"))
其中 mono
是您选择的字体。
默认字体选项列表:
- 单声道
- 没有
- 衬线体
- 快递
- Helvetica
- 次
- 前卫
- 书人
- Helvetica-Narrow
- 新世纪教科书
- 帕拉蒂诺
- URW哥特式
- URW书人
- NimbusMon
- URWHelvetica
- NimbusSan
- NimbusSanCond
- 世纪中学
- URW帕拉迪奥
- URWTimes
- NimbusRom
R 的字体覆盖率不高,正如
This page 详细介绍默认字体。
全局更改 ggplot2 图的字体。
theme_set(theme_gray(base_size = 20, base_family = 'Font Name' ))