2013-02-06 54 views
25

我无法在geom_text中设置字体。这是我试过的:无法在ggplot/geom_text中更改字体

labels_test<-data.frame(a=c("a","b","c"),b=c(1:3),c=c(3:1)) 
    # works 
    ggplot() + geom_text(data=labels_test,aes(b,c,label=a),color="blue") 
    # does not work: 
    ggplot() + geom_text(data=labels_test,aes(b,c,label=a),color="blue",family="Times") 
    # error message: In grid.Call.graphics(L_text, as.graphicsAnnot(x$label), x$x, x$y,: 
    # Font family not found in Windows font database 

我已经导入了所有的字体,如here所示。任何想法仍然出错?

+5

如果您尝试使用'windowsFonts(Times =“windowFont”(“TT Times New Roman”))'',它会起作用吗? –

+1

是的。谢谢。你应该把它作为答案。你能解释一下吗?当我想使用不同的字体时,我是否必须在所有脚本中执行此操作? – Joschi

+0

我刚刚在Mac上,所以我无法摆弄,但[this](https://groups.google.com/forum/?fromgroups=#!topic/ggplot2/781cT5yMqCg)可能有帮助,但主要是这个想法这是一旦你已经安装了它们给R的字体以明确使用 –

回答

25

我会尝试”

windowsFonts(Times=windowsFont("TT Times New Roman")) 

在这一过程中你明确指定的Windows字体映射

+1

那么你会如何去做每一个导入的字体呢? –

10

您必须使用命令导入系统字体:

font_import(paths = NULL, recursive = TRUE, prompt = TRUE,pattern = NULL) 
+1

这实际上是真正的_answer_的问题。 – skoh

+2

如果您有很多字体,则此解决方案需要很长时间。使用'pattern =“Times”'或其他来减少加载的字体数量 – C8H10N4O2

13

其他的答案没有解决我的问题(Windows 10)

我的系统的关键洼s致电extrafont::loadfonts(device="win")之前library(ggplot2)

extrafont::loadfonts(device="win") 
#extrafont::fonttable() 
#extrafont::font_import("C:/Windows/Fonts/", pattern = "RobotoCondensed") 
library(ggplot2) 

与字体位置常见问题:

我已经安装了一个随机文件夹中的字体与extrafont::font_import()之前。因此extrafont::fonttable()引用了我的C:\Windows\Fonts\文件夹中的文件。为了解决这个问题,我重置了我的extrafonts::fonttable()install.packages("extrafontdb"),以清除对不同位置的字体的引用。

关于节能编辑:

更深下来的兔子洞。储蓄是一个额外的挑战。为了extrafont::loadfonts(device="pdf")我必须确保我的extrafont::fonttable()中没有字体具有相同的姓氏和粗体/斜体状态。我编辑extrafont:::fonttable_file()来解决我家中任何重复的粗体/斜体字体。使用Roboto Condensed,我将光字体的字体家族重命名为“Roboto Condensed Light”。

随着ggsave(device="pdf")保存,然后工作。在acrobat中打开文件的字体无法正确显示。我尝试使用ghostscript嵌入字体以及使用cairo_pdf设备。最简单和最实用的解决方案是在Illustrator中打开.pdf文件(字体在那里显示得很好),然后立即再次将它们保存为.pdf。

编辑2关于节能:

保存为.EPS是保持在两插画和Acrobat文件的唯一途径。结果是完美的。 ggsave(g, file="Figure.eps", fonts=c("FONT FAMILIES USED", "Roboto Condensed", "Roboto Condensed Light"))

最终绘制代码:

这是我的最后一组我绘制之前使用电话。注释是需要仅运行一次的设置命令。

# Plotting 
extrafont::loadfonts(device="pdf") 
extrafont::loadfonts(device="postscript") 
# extrafont::font_import("C:/Windows/Fonts/", pattern = "RobotoCondensed", prompt = F) 
# extrafont::fonttable() 
# C:/Program Files/R/R-3.3.1/library/extrafontdb/fontmap/ - Change lights to "Roboto Condensed Light" 
# After ggsave(device="pdf") or ggsave(device="eps") open and resave the file in Illustrator 
library(hrbrthemes) 
library(ggplot2)