Unicode characters in plots to use in dynamic reports using R, Sweave and knitr
我在使用knitr在Sweave中的R studio生成的LaTeX报表中的ggplot2生成的图中正确显示字体时遇到问题。
起初,我无法正确生成带有波兰字体的pdf,但此问题已在本文中解决:
ggplot2 PDF输出中的Unicode字符
简而言之,作者建议使用Cairo包(在R中)使用ggplot2生成图。
这对我有用-一次->意味着我能够生成带有波兰字符的绘图,但是当我尝试在sweave文档中使用它使用knitr生成LaTeX报告时,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <wyn> << pieniadze_graph,fig = TRUE,echo = FALSE >> = 图书馆(开罗) cairo_pdf(" TutorialExercisesPart2-pieniadze_graph.pdf") plot1 <-qplot(支出,数据= cas)+ xlim(0,8000)+ xlab(expression(paste(" Pieni?dze wydane na ucznia($)")))+ ylab(" Liczbaszkó??"" nprint(图1 n @ <; / code&gt <; / pr> n <;>;我得到一个错误。<; /> n <; pre&gt <; cod>;在TutorialExercisesPart2.tex上运行pdflatex ...失败<; / code&gt <; / pr> n <;>;调查发生的情况>;我发现用cairo生成的文件是空白的(有一个名为cairo_pdf的pdf文件,但是无法用pdf查看器打开>;错误无法打开文本文件<; /> n <;>;现在需要注意以下几点:cairo_pdf函数需要设置文件名。因此,我给pdf一个名称,该名称以后必须由tex文件使用,格式为filename-chunk_name.pdf(对于动态报告而言,这要多得多:P <; /> n <;>;因此我不赞成cairo_pdf选项。 n是否有一种无需cairo_pdf选项即可生成正确的pdf文件的方法<; /> n <;>;没有cairo-pdf,我无法在这个主题上找到更多信息。 n <;>;当我删除cairo部分时,很好地生成了tex文件,其中带有难看的点标签PDF文件。 n <; p&gt <; img s""" https://i.stack.imgur.com/Ff3Ka。"" a""这是什么?字母看起来像在生成的re" o""&g <t;>中 <t; p&g <t; img" r"" https://i.stack.imgur.com/7bAvx" p""" l""这里是从Rstudio直接导出到png的绘图的外观" i""&g <t;><hr> <p> 而不是像调用cairo_pdf()那样打开设备,而是应该指示knitr使用该设备。看一下knitr选项,尤其是" dev"。总而言之,您需要 </p> [cc]<<pieniadze_graph,fig=TRUE,echo=FALSE,dev='cairo_pdf'>>= ... |
或将其默认为所有块
1 | opts_chunk$set(dev='cairo_pdf') |
好吧,我终于明白了!
块标题中的Sweave编码确实是一个问题。
@Matev的响应之后,我开始测试dev ='cairo_pdf'->,但这并没有改变输出。
为什么?因为
1 2 | <<dev='cairo_pdf'>>= @ |
仅由knitr Rnw文件编织器解释!!!我使用的是Sweave编织器(这是在R Studio的" Sweave"部分的全局选项中设置的)。
认识到不太明显的错误(因为Sweave和knitr都使用类似的块标题脚本格式)后,我在他的Sweave手册中弄清了Leisch对此的看法。这是他为每个有相同问题的人的解决方案:
将此代码放在文档的开头(在R库之后)
1 2 3 4 5 | <<>>= my.Swd <- function(name, width, height, ...) grDevices::cairo_pdf(filename = paste(name,"pdf", sep ="."), width = width, height = height) @ |
您现在可以在单独的块中使用以下代码
1 2 | <<chunk_name,grdevice=my.Swd,fig=TRUE>>= @ |
或@Matev建议在全局范围内为整个文档设置块选项(但同样,他的回答是针对knitr weaver的):
1 | \\SweaveOpts{grdevice=my.Swd} |
现在,您将获得由cairo_pdf设备(基本R设备)生成的漂亮绘图,该设备很好地处理了单极字体!他们会像魔术一样迷恋您的动态报告!
我还要感谢Yihui的针织包,它很棒!