ggplot在pdf中嵌入字体
Posted
技术标签:
【中文标题】ggplot在pdf中嵌入字体【英文标题】:ggplot embedded fonts in pdf 【发布时间】:2015-02-16 23:42:28 【问题描述】:我一直在使用以下指南将使用ggplot
制作的绘图导出为 pdf:plot fonts guide
它在帖子底部提出了一些字体未按应有方式显示的问题,这发生在我下面的示例中。 Bauhaus 93 字体中的文本显示正确,而 Calibri 中的文本显示不正确。
有没有人找到解决这个问题的方法?
library(ggplot2)
library(plyr)
library(grid)
library(gridExtra)
library(extrafont)
data1<-as.data.frame(1:5)
data1[,2]<-as.data.frame(c(1,3,5,7,9))
data1[,3]<-as.data.frame(c(2,4,6,8,10))
colnames(data1)<-c("x","y1","y2")
ggplot(data1, aes(x=x)) +
geom_line(aes(y = y1, colour = "Taux selon DEF"), size=0.61, colour="black") +
geom_line(aes(y = y2, colour = "Taux selon EC"), size=0.61, colour="black", linetype="dashed") +
xlab("X axis lab") + ylab("Y axis lab)") +
annotate("text", x=1, y=4, label="Some text here", size=2, family="Bauhaus 93") +
annotate("text", x=4, y=1, label="More text here", size=2, family="Calibri") +
theme_bw() + theme(legend.title = element_blank(),
legend.key = element_rect(fill=NA),
panel.border = element_blank(),
axis.line = element_line(colour="black", size=0.25),
axis.ticks = element_line(size=0.25),
panel.grid.major = element_line(colour = "grey80", size=0.25),
panel.grid.minor = element_line(colour = "grey80", size=0.25),
axis.text.x = element_text(size=5.5 , lineheight=0.9, hjust=0.5, family="Bauhaus 93"),
axis.text.y = element_text(size=5.5 , lineheight=0.9, vjust=0.5, family="Calibri"),
axis.title.y = element_text(size=6.1, angle=0, vjust=0.975, face="bold", family="Calibri"),
axis.title.x = element_text(size=6.1, angle=0, vjust=-0.20, face="bold", family="Calibri")) +
scale_x_continuous(expand = c(0, 0), limits=c(0,5)) +
scale_y_continuous(expand = c(0, 0), limits=c(0,10)) +
ggtitle("Title") +
ggsave("Test.pdf", width=7, height=5)
Sys.setenv(R_GSCMD = "C:/Program Files (x86)/PDF24/gs/bin/gswin32.exe")
embed_fonts("Test.pdf")
【问题讨论】:
最初我遇到了同样的错误,但现在我无法重现它!fonttable()
的输出是什么样的?
以下输出是针对 calibri 系列 65 Calibri Calibri FALSE FALSE FALSE NA 66 Calibri Calibri-Bold TRUE FALSE FALSE NA 67 Calibri Calibri-BoldItalic TRUE TRUE FALSE NA 68 Calibri Calibri-Italic FALSE TRUE FALSE NA 69 Calibri Light Calibri-Light FALSE FALSE FALSE NA 70 Calibri Light Calibri-LightItalic FALSE TRUE FALSE NA
好的,我已经能够在 Windows 上重现该问题:它会产生大量“字体宽度未知”警告,并且所有 Calibri 字符都混杂在一起。这里有一些相关的extrafont问题:github.com/wch/extrafont/issues除了使用不同的字体,我不知道该建议什么!
好的,感谢您的努力。我会坚持使用另一种字体。
【参考方案1】:
尝试将device=cairo_pdf
添加到ggsave()
调用中。这似乎为我解决了这个问题。这样,就不再需要使用embed_fonts()
。
在此处查看 mgaudet 的评论:https://github.com/wch/extrafont/issues/8
【讨论】:
我还发现使用device=cairo_pdf
会嵌入字体,但这会导致更差的字距调整——有人知道更好的解决方案吗?
@user1092247 您请求的字体可能不支持字距调整。请记住,字距调整是由字体设计者完成的,尽管有些系统会忽略这一点。
很好的答案。我发现我必须在ggsave
中增加width
和height
参数才能获得类似于我以前在系统上没有device=cairo_pdf
时获得的结果,然后才能彻底更新到MacOS Sierra
。
较新版本的 R 不再支持 cairo,这让你得到 failed to load cairo DLL
。有什么新想法可以解决这个问题吗?以上是关于ggplot在pdf中嵌入字体的主要内容,如果未能解决你的问题,请参考以下文章