面板与不同的图形包数字

时间:2016-03-03 12:10:30

标签: r plot knitr lattice

我希望这个问题得到正确陈述。出于教学目的,我想创建一个knitr文档,其中R基本图形系统的输出和莱迪思包的输出在面板中进行比较。 考虑一个数字向量:

```{r dataload}
e2 <- c(72, 79, 81, 80, 63, 62, 89, 90, 50, 78, 87, 97, 55, 69, 97, 87, 
        88, 99, 76, 78, 65, 77, 88, 90, 81)
```

我尝试使用以下代码生成一个面板:

```{r plots}
par(mfrow = c(1,2))    #Set 1 row 2 columns panel
hist(e2)               #Base graphic histogram on the left
histogram(~e2)         #Lattice histogram on the right
```

但莱迪思直方图关闭了面板,删除了基本图形直方图。

预期结果:

面板应该在一侧报告Base图,在另一侧报告Lattice图,类似于这个非常漂亮{​​{3}}的产品。不幸的是,博客没有解释结果是如何产生的,我没有找到关于这个问题的进一步信息。 我可以轻松地生成两个不同的图像,但我认为面板表示会产生更精美的可比结果

非常感谢您的耐心等待。

1 个答案:

答案 0 :(得分:1)

正如here on the R mailing list所述,lattice和基础R图形的兼容性有限。 article中引用的this entry表示可以完成,但有一些复杂情况。然而,这个简单的案例并不值得付出努力,因为更简单的解决方案是生成两个独立的图并将它们并排放置。

这引出了一个新问题:如何在Rmarkdown中并排放置两个数字?有一些答案可以解释如何将数字与knitr并排放置,但大多数其中涉及LaTeX / RNW文件。 Rmarkdown的可能解决方案在this answer中提供,但我想建议另一种不涉及添加自定义CSS的简单方法:

```{r mychunk, fig.show='hide'}
library(knitr)
library(lattice)
hist(iris$Sepal.Length)
histogram(iris$Sepal.Length)
```

base|lattice
-------------------------------|-------------------------------:
`r include_graphics(paste0(opts_chunk$get("fig.path"), "mychunk-1.png"))`|`r include_graphics(paste0(opts_chunk$get("fig.path"), "mychunk-2.png"))`

chunk option fig.show = 'hide'禁止自动打印数字。无论如何都会生成这些数字,然后可以使用include_graphics结合使用opts_chunk$get("fig.path")获得的数据目录的路径以及knitr将图像命名为fig.path-label-i这一事实进行插入其中i从1“开始递增(来源:上一个链接)。

使用Pandoc pipe_table实现并排布局。这很方便,因为只需在第二行添加或删除短划线即可控制图像的宽度。

注意:在HTML文档中,除非YAML option self_containedfalse,否则使用数据URI而不是文件包含图像。上面的解决方案仍然有效,因为knitr处理RMD文件到MD,图像或尚未转换为数据URI;这发生在Pandoc从MD文件生成HTML的下一步中。