来自功能`scatter3d`和RGL

时间:2019-07-01 07:18:58

标签: pdf r-markdown bookdown rgl

我正在使用bookdown创建一本书,并且已经从scatter3d()car运行了rgl函数。

我已经阅读到3D图像可以用HTML(here)交互地实现,但是,我需要在PDF输出中实现简单的纯图像。

我该怎么办?

让我们使用以下示例:

scatter3d(mpg~hp+qsec|factor(cyl), data=mtcars, surface=FALSE, residuals=TRUE, 
  parallel=FALSE, bg="white", axis.scales=TRUE, grid=TRUE, ellipsoid=TRUE)

编辑1

通过使用@ user2554330的答案,我创建了R Markdown文件(.Rmd):

---
title: "Untitled"
author: "Mario"
date: "1 July 2019"
output:
  pdf_document: default
  html_document: default
---

```{r echo=FALSE}
library(rgl)
library(car)
setupKnitr()
```

Here's a plot:

```{r echo=TRUE, dev="png", rgl=TRUE}
scatter3d(mpg~hp+qsec|factor(cyl), data=mtcars, surface=FALSE, residuals=TRUE,
          parallel=FALSE, bg="white", axis.scales=TRUE, grid=TRUE, ellipsoid=TRUE)    
```

但是,当我将.Rmd文件转换为PDF时,看不到该图:

enter image description here

出什么问题了?

1 个答案:

答案 0 :(得分:0)

有时,您可以使用rgl.postscript()从rgl图像创建PDF文件。当它起作用时,它将提供最好的质量,但是它并不总是起作用:不支持透明度等。

rgl.snapshot()将生成当前rgl窗口的PNG图像。除非您可以将rgl窗口变大,否则可能看起来有点像素化。 (将虚拟窗口设置为大于屏幕大小会很好,但是rgl不支持非屏幕缓冲区,而Xvfb之类的东西往往不支持OpenGL绘制。)

knitr可以安装的rgl钩子使用这些钩子,因此您可以拥有这样的文档:

```{r echo=FALSE}
library(rgl)
library(car)
setupKnitr()
```

Here's a plot:

```{r rgl=TRUE, dev="png"}
scatter3d(mpg~hp+qsec|factor(cyl), data=mtcars, surface=FALSE, residuals=TRUE,
          parallel=FALSE, bg="white", axis.scales=TRUE, grid=TRUE, ellipsoid=TRUE)    
```

您可以使用块选项dpi(每英寸点数,默认为72),但显示屏上将支持上限。除非您的数字很大,否则您应该可以比默认值更大。