在带有 knitr 的 Rnw 中使用 ggvis

Posted

技术标签:

【中文标题】在带有 knitr 的 Rnw 中使用 ggvis【英文标题】:Using ggvis in Rnw with knitr 【发布时间】:2014-11-28 17:09:03 【问题描述】:

我想知道我是否可以将 .Rnw 中的 ggvis 与 knitr 一起使用。我在RStudio Version 0.98.1091 中尝试了以下代码。但它不起作用。

\documentclassbook
\usepackage[T1]fontenc
\usepackagefloat
\usepackagebooktabs
\usepackagedcolumn
\usepackagegeometry
\geometryverbose,tmargin=2cm,bmargin=2cm,lmargin=2cm,rmargin=2cm

\begindocument
\chapterTest
\beginfigure[H]
<< label = Plot1, fig.lp = "Plot1", fig.cap = "Test Plot" >>=
library(ggvis)
p <- mtcars %>% ggvis(x = ~wt, y = ~mpg) %>% layer_points()
print(p)     # Commenting this line will compile the document
@
\endfigure
\enddocument

它会抛出以下错误:

LaTeX errors:
! Missing $ inserted.
<inserted text> 
                $
l.70 \endkframe<!--html_
                          preserve--><div id="plot_id298740869-container" cl...
! Please use \mathaccent for accents in math mode.

已编辑

注释print(p) 行将编译该文档而不会出现任何错误。

如果有像ggsave() 这样的命令来保存ggvis 绘图就足够了。

【问题讨论】:

【参考方案1】:

是的。

export_png 函数可以从 ggvis 对象创建 PNG 图像。

它使用node javascript 解释器,而node 需要安装vega 包。

在 linux 命令行中,我可以这样做:

sudo npm -g install vega

使用节点包管理器全局安装vega 包。我不知道你是如何在 Windows 或 Mac 机器上做到这一点的。

完成后,您可以:

\documentclassbook
\usepackage[T1]fontenc
\usepackagefloat
\usepackagebooktabs
\usepackagedcolumn
\usepackagegeometry
\geometryverbose,tmargin=2cm,bmargin=2cm,lmargin=2cm,rmargin=2cm

\begindocument
\chapterTest
\beginfigure[H]
<< label = Plot1, fig.lp = "Plot1", fig.cap = "Test Plot" >>=
library(ggvis)
p <- mtcars %>% ggvis(x = ~wt, y = ~mpg) %>% layer_points()
export_png(p,"Plot1.png")    
@
\includegraphics[width=0.8\textwidth]Plot1.png
\endfigure
\enddocument

做:knit2pdf("gg.Rnw")

然后得到:

请注意,您必须手动添加标题和标签。或许可以说服亿辉将这个更好地融入到knitr中,或者可能有一种使用knitr hooks的方法。无论如何,概念证明了......

【讨论】:

我喜欢ggplot2 并且经常使用。但是ggplot2 中没有某些功能,尤其是在ggvis 中可用的顶部x 轴。有没有办法使用命令以pdfpng 格式保存ggvis 绘图?谢谢 您必须控制浏览器才能通过浏览器的“打印”功能打开生成的 HTML 并保存 PDF。可行但不简单... 请查看我的编辑。如果有像ggsave() 这样的命令来保存ggvis 地块就足够了。 如果你安装了一些其他的东西,你也许可以通过 ggvis::export_png 创建一个 PNG - 一旦我得到这个工作,我可能会为你编辑我的答案...... 感谢@Spacedman 的帮助。我在等你的答复。再次感谢。

以上是关于在带有 knitr 的 Rnw 中使用 ggvis的主要内容,如果未能解决你的问题,请参考以下文章

R Markdown、Knitr、Pandoc和Bookdown之间的关系

R,knitr不尊重块和文本的顺序

带有 bash 的 knitr:更改工作目录

带有 knitr 和 Rmarkdown 的 Unicode

带有 knitr 幻灯片的长功能垂直滚动条

如何在带有`knitr::kable`的表格*上方添加标题?