创建svg图表而非png时,R标记字体宽度未知警告

创建svg图表而非png时,R标记字体宽度未知警告,r,svg,fonts,png,r-markdown,R,Svg,Fonts,Png,R Markdown,我有一个报告,我在rmarkdown中输出了一些带有device=svg的ggplot图表。输出格式为html。不幸的是,我收到了很多如下的警告。如果指定device=png,则不会收到任何警告 ## Warning in grid.Call(L_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : ## font width unknown for character 0x53 有人知道为什么png工作(或者至少不给出任何警告)而svg不工作吗

我有一个报告,我在rmarkdown中输出了一些带有device=svg的ggplot图表。输出格式为html。不幸的是,我收到了很多如下的警告。如果指定device=png,则不会收到任何警告

## Warning in grid.Call(L_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## font width unknown for character 0x53
有人知道为什么png工作(或者至少不给出任何警告)而svg不工作吗?下面是会话信息和不可复制的代码。我使用的是extrafont,我想可能与此有关

会话信息:

R version 3.3.1 (2016-06-21)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)

locale:
[1] LC_COLLATE=Swedish_Finland.1252  LC_CTYPE=Swedish_Finland.1252
    LC_MONETARY=Swedish_Finland.1252 LC_NUMERIC=C                    
[5] LC_TIME=Swedish_Finland.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] extrafont_0.17   cairoDevice_2.23 Cairo_1.5-9      RODBC_1.3-13    

loaded via a namespace (and not attached):
[1] magrittr_1.5    htmltools_0.3.5 tools_3.3.1     yaml_2.1.13  
    Rcpp_0.12.5     stringi_1.1.1   rmarkdown_1.0   extrafontdb_1.0
[9] knitr_1.13      stringr_1.0.0   digest_0.6.9    Rttf2pt1_1.3.4
    evaluate_0.9   
代码块:

```{r plot2, echo = FALSE, fig.show='hold', out.width='50%', dev=c('svg')}
ggplot代码示例:

ggplot(dt.bar2_1, 
   aes(x=factor(Mon), y=nsk_rel, fill =Class)) +
   geom_bar(stat="identity", position = "dodge")+
   scale_fill_manual(values = c("#6baed6","#3182bd"), name = "Type") +
   scale_y_continuous(labels = percent, 
                      breaks = c(0, 0.02, 0.04, 0.06, 0.08, 0.10), 
                      limits = c(0, 0.10))+
   theme(axis.text.x = element_text(size=11),
         axis.text.y = element_text(size=11))+
   xlab("Month") + ylab("Freq")+
   ggtitle(Title.2_1) +
   theme(plot.title = element_text(family = "Trebuchet MS", 
                                   color="#666666", 
                                   face="bold", 
                                   size=16,
                                   hjust=0))
调用
fonttable()
时:


问题是,svg设备不知道字体Trebucht MS。请查看软件包
extrafont
。安装它并使用导入所有系统字体

install.packages("extrafont")
library(extrafont)
font_import()
这需要几分钟的时间。之后,将这些行放在您的RMarkdown文档中:

```{r}
library(extrafont)
loadfonts(device = "pdf", quiet = T)
```

只要您的系统上有投石机MS,这就可以了。

我不确定您是否需要帮助。然而,我今天遇到了这个问题,我终于找到了一个简单的方法。我把它贴在这里,以备将来有人需要

代码如下:

windowsFonts(myFont = windowsFont("TT Times New Rome"))

line_plot = ggplot(data = total_plot_data, aes(x = hour, y = electricity, group = type, colour = type, linetype = type)) + 
  geom_line(size = 0.75) + 
  theme(
    text = element_text(family = "myFont", size = 15),
    legend.text = element_text(size = 10),
  );

只需添加一行作为
windowsFonts(myFont=windowsFont(“TT Times New Rome”))
,然后使用
element\u text(family=“myFont”,size=15)
在我的计算机上解决此问题。

这里的响应也很晚。无论出于何种原因,pdf和svg似乎在使用这种字体时遇到了一些问题,即使字体加载正确。
如果是一个选项,您可以为矢量化图形设置
dev='cairo\u pdf'
。这也适用于普通的R脚本。

谢谢@Martin,我已经加载了extrafont软件包并导入了字体。最后一行,loadfonts,我还没用过。所以我试过了,但似乎没用。我开始认为我应该让所有这些幻灯片,即使它让我恼火的是png工作,而不是svg!当我想起来的时候,我的图表的标题看起来确实像是用投石机作为字体,尽管有警告。如果我不运行主题情节标题部分,我会得到另一种字体。@ErrantBard有趣。不过对我来说很管用。你确定Trebuchet MS在extrafontdb中注册了吗?确实很有趣-有些奇怪,我毫不怀疑它与extrafontdb有关,正如你所说:)请看上图,从我调用fonttable时开始。@Martin Schmelzer:我遇到了类似的问题,但这里和其他地方提出的解决方案都没有这么大的帮助。这是我的问题tionhttps://stackoverflow.com/questions/62067139/warning-in-grid-callc-textbounds-as-graphicsannotxlabel-xx-xy-font-w 非常感谢您的帮助!