将 extrafont 与 cowplot 一起使用:字符错误的字体宽度未知
Using `extrafont` with `cowplot`: font width unknown for character error
我正在尝试使用 ggplot
中的字体,但我只能通过 extrafont
包获得。然后,当我想使用 cowplot
包组合多个图时,我总是会出现大量此类错误:
46: In grid.Call(C_textBounds, as.graphicsAnnot(x$label), ... :
font width unknown for character 0x65
47: In grid.Call(C_textBounds, as.graphicsAnnot(x$label), ... :
font width unknown for character 0x63
48: In grid.Call(C_textBounds, as.graphicsAnnot(x$label), ... :
font width unknown for character 0x69
49: In grid.Call(C_textBounds, as.graphicsAnnot(x$label), ... :
font width unknown for character 0x65
50: In grid.Call(C_textBounds, as.graphicsAnnot(x$label), ... :
font width unknown for character 0x73
注意 该包确实会生成输出(即并排绘图),但错误消息与我有关。
到目前为止我尝试了什么:
- 使用
extrafont::font_install()
安装字体
- 正在使用
extrafont::loadfonts()
加载字体
我安装了 extrafont
和 extrafontdb
以及 cowplot
。
这是我的使用示例:
library(tidyverse)
library(extrafont)
library(cowplot)
library(palmerpenguins)
data(penguins)
penguins %>%
select(year, flipper_length_mm,species) %>%
ggplot(aes(x=year,y=flipper_length_mm,fill=species)) +
geom_col() +
labs(title = "First Plot") +
theme(text = element_text(family = "Georgia")) -> plot1
penguins %>%
select(year, bill_length_mm,species) %>%
ggplot(aes(x=year,y=bill_length_mm,fill=species)) +
geom_col() +
labs(title = "Second Plot") +
theme(text = element_text(family = "Georgia")) -> plot2
cowplot::plot_grid(plot1,plot2)
由于 Claus Wilke 在评论中的回答,我很快就回答了这个问题:
需要设置空设备。
您可能需要安装开发版本才能完全正常工作(它对我来说工作得很好!)。
简短回答:
set_null_device(cairo_pdf)
cowplot::plot_grid(plot1,plot2)
并且错误消息消失了。使用 set_null_device("png")
也对我有用,但考虑到我的目标是保存 PDF,根据 Claus 的说法,这是更安全的选择。
完整:
library(tidyverse)
library(extrafont)
library(cowplot)
library(palmerpenguins)
data(penguins)
penguins %>%
select(year, flipper_length_mm,species) %>%
ggplot(aes(x=year,y=flipper_length_mm,fill=species)) +
geom_col() +
labs(title = "First Plot") +
theme(text = element_text(family = "Georgia")) -> plot1
penguins %>%
select(year, bill_length_mm,species) %>%
ggplot(aes(x=year,y=bill_length_mm,fill=species)) +
geom_col() +
labs(title = "Second Plot") +
theme(text = element_text(family = "Georgia")) -> plot2
set_null_device(cairo_pdf)
cowplot::plot_grid(plot1,plot2)
我正在尝试使用 ggplot
中的字体,但我只能通过 extrafont
包获得。然后,当我想使用 cowplot
包组合多个图时,我总是会出现大量此类错误:
46: In grid.Call(C_textBounds, as.graphicsAnnot(x$label), ... :
font width unknown for character 0x65
47: In grid.Call(C_textBounds, as.graphicsAnnot(x$label), ... :
font width unknown for character 0x63
48: In grid.Call(C_textBounds, as.graphicsAnnot(x$label), ... :
font width unknown for character 0x69
49: In grid.Call(C_textBounds, as.graphicsAnnot(x$label), ... :
font width unknown for character 0x65
50: In grid.Call(C_textBounds, as.graphicsAnnot(x$label), ... :
font width unknown for character 0x73
注意 该包确实会生成输出(即并排绘图),但错误消息与我有关。
到目前为止我尝试了什么:
- 使用
extrafont::font_install()
安装字体
- 正在使用
extrafont::loadfonts()
加载字体
我安装了 extrafont
和 extrafontdb
以及 cowplot
。
这是我的使用示例:
library(tidyverse)
library(extrafont)
library(cowplot)
library(palmerpenguins)
data(penguins)
penguins %>%
select(year, flipper_length_mm,species) %>%
ggplot(aes(x=year,y=flipper_length_mm,fill=species)) +
geom_col() +
labs(title = "First Plot") +
theme(text = element_text(family = "Georgia")) -> plot1
penguins %>%
select(year, bill_length_mm,species) %>%
ggplot(aes(x=year,y=bill_length_mm,fill=species)) +
geom_col() +
labs(title = "Second Plot") +
theme(text = element_text(family = "Georgia")) -> plot2
cowplot::plot_grid(plot1,plot2)
由于 Claus Wilke 在评论中的回答,我很快就回答了这个问题:
需要设置空设备。 您可能需要安装开发版本才能完全正常工作(它对我来说工作得很好!)。
简短回答:
set_null_device(cairo_pdf)
cowplot::plot_grid(plot1,plot2)
并且错误消息消失了。使用 set_null_device("png")
也对我有用,但考虑到我的目标是保存 PDF,根据 Claus 的说法,这是更安全的选择。
完整:
library(tidyverse)
library(extrafont)
library(cowplot)
library(palmerpenguins)
data(penguins)
penguins %>%
select(year, flipper_length_mm,species) %>%
ggplot(aes(x=year,y=flipper_length_mm,fill=species)) +
geom_col() +
labs(title = "First Plot") +
theme(text = element_text(family = "Georgia")) -> plot1
penguins %>%
select(year, bill_length_mm,species) %>%
ggplot(aes(x=year,y=bill_length_mm,fill=species)) +
geom_col() +
labs(title = "Second Plot") +
theme(text = element_text(family = "Georgia")) -> plot2
set_null_device(cairo_pdf)
cowplot::plot_grid(plot1,plot2)