首页 > 解决方案 > 从函数`scatter3d`和RGL输出的R Markdown PDF中的纯图像

问题描述

我正在创建一本书,bookdown并且我已经从和运行了该scatter3d()功能。carrgl

我已经读过 3D 图像可以在 HTML 中交互式实现(这里),但是,我需要在 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 时,我看不到图:

在此处输入图像描述

问题出在哪里?

标签: pdfr-markdownbookdownrgl

解决方案


有时您可以使用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),但您的显示器将支持上限。除非你有一个非常大的数字,否则你应该能够比默认值更大。


推荐阅读