% keep(~grepl(".*Trade.*", .)) ## [1] "TradeGothic LT Co-6ren">
gpt4 book ai didi

r - 在 grid.draw 中使用来自 extrafont 的字体

转载 作者:行者123 更新时间:2023-12-04 10:54:14 27 4
gpt4 key购买 nike

假设我有一个这样的数据集:

dat <- data.frame
text = c(
"It made me feel very positive to brand X",
"It was clear and easy to understand",
"I didn't like it al all"),
value=runif(3)
)

我可以使用来自 extrafonts 的 TradeGothic LT CondEightteen 字体在 ggplot 中绘制它包裹:
library(ggplot2)
p <- ggplot(dat, aes(text, value)) +
geom_bar(stat="identity") +
coord_flip() +
labs(title=" Do you agree with the following statements?")+
theme_bw(16)+
theme(text=element_text(family="TradeGothic LT CondEighteen"))

ggsave('plot.pdf', plot = plot, path = "/Users/jacobdeecurtis/Desktop")

enter image description here

但是当我使用 ggplot_gtable在情节上:
gt <- ggplot_gtable(ggplot_build(plot))
gt$layout[which(gt$layout$name == "title"), c("l", "r")] <- c(1, max(gt$layout$r))
grid::grid.draw(plot)

ggsave('plot.pdf', plot = plot, path = "/Users/jacobdeecurtis/Desktop")

运行 grid.draw 函数后出现错误。错误是:
Error in grid.Call(L_textBounds, as.graphicsAnnot(x$label), x$x, x$y,  : 
polygon edge not found
In addition: Warning messages:
1: In grid.Call(L_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
no font could be found for family "TradeGothic LT CondEighteen"...

当我不使用 TradeGothic LT CondEighteen 字体时,我不会收到错误消息。

谢谢你的帮助!

最佳答案

我,呃,“碰巧有”一个这种字体的副本,并做了 extrafont::font_import()跳舞并得到你的错误。但是,经过进一步检查:

library(purrr)

loadfonts()

pdfFonts() %>%
map_chr("family") %>%
keep(~grepl(".*Trade.*", .))
## [1] "TradeGothic LT CondEighteen"

似乎 PDF 设备想要这个名字。

虽然 R 有很多很棒的地方,但它处理字体的方式就像蜥蜴乌鸦 (#atla) 一样细致、友好和可用。

更新

完整示例(没有损坏的 data.frame 创建代码和引用 plot vs p 和实际上 grid.draw() ing gt vs plotp 修改 ggplot 后:
library(ggplot2)
library(grid)
library(extrafont)

dat <- data.frame(
text = c(
"It made me feel very positive to brand X",
"It was clear and easy to understand",
"I didn't like it al all"),
value=runif(3)
)

p <- ggplot(dat, aes(text, value)) +
geom_bar(stat="identity") +
coord_flip() +
labs(title=" Do you agree with the following statements?")+
theme_bw(16)+
theme(text=element_text(family="TradeGothic LT CondEighteen"))

loadfonts()

ggsave('plot.pdf', plot=p, path="~/Desktop")

^^ 部分生成以下 PDF(从预览导出为 PNG):

enter image description here
gt <- ggplot_gtable(ggplot_build(p))
gt$layout[which(gt$layout$name == "title"), c("l", "r")] <- c(1, max(gt$layout$r))

pdf("~/Desktop/plot.pdf")
grid::grid.draw(gt)
dev.off()

^^ 部分生成以下 PDF(从预览导出为 PNG):

enter image description here
p <- ggplot(dat, aes(text, value)) + 
geom_bar(stat="identity") +
coord_flip() +
labs(title=" Do you agree with the following statements?")+
theme_bw(16)+
theme(text=element_text(family="TradeGothicLT-CondEighteen"))

gt <- ggplot_gtable(ggplot_build(p))
gt$layout[which(gt$layout$name == "title"), c("l", "r")] <- c(1, max(gt$layout$r))

grid::grid.draw(gt)

这是来自 RStudio 的屏幕截图(包含一些 RStudio UI 以显示它在 RStudio 图形设备中):

enter image description here

遗憾的是,我们必须这样做(更改字体的命名约定,以便 R 演示代码的各个位可以选择正确的),但这就是 R 中字体的当前状态。

我为我的公司生成研究报告的内容,并为屏幕(开发期间)和生产 PDF 生成(用于将最终输出移交给创意团队)使用单独的主题代码。这是一个令人沮丧的拐杖,但它有效。

关于r - 在 grid.draw 中使用来自 extrafont 的字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41413508/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com