使用R,Sweave和knitr在动态报表中使用的绘图中的Unicode字符

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的针织包,它很棒!