我正在关注集成ggplot2和d3的简单教程.我正在本教程网站(http://timelyportfolio.github.io/gridSVG_intro/)上专门研究方法2 .我试图复制交互式情节(这是该页面上的最后一个情节).
我使用了相同的语法,并将其插入到.R文件中,如下所示:
library(gridSVG) library(ggplot2) library(XML) library(rjson) set.seed(955) dat <- data.frame(cond = rep(c("A", "B"), each=10), xvar = 1:20 + rnorm(20,sd=3), yvar = 1:20 + rnorm(20,sd=3)) g4 = ggplot(dat, aes(x=xvar, y=yvar)) + geom_smooth() + geom_point(shape=19, aes(color = cond), size=5) g4 g4.svg <- grid.export("plot1.svg",addClasses=TRUE) cat(saveXML(g4.svg$svg)) cat( '' ) cat( '' ) cat( '\n' ) cat('' )
我从这个脚本得到的唯一输出是plot1.svg文件.但是,当我在浏览器中打开它时(尝试过Safari和谷歌浏览器),它是图像的停滞版本.
我会给作者发电子邮件.但该联系信息不可用.它本来是一个简单的教程,所以我希望它是一个简单的解决方案!
我对这个交互式组件很新.但是,我一步一步地遵循了指示,并且不确定我可能忽略了什么.任何与解决此问题相关的支持或信息都将非常感谢!
EDITS
所以,我最后安装了R来看看我原来的答案出错了.我很接近.我错过了一个saveXML
电话,因为@ arvi1000指出我没有来源d3
.这是一个完整的修复示例.我刚用R 3.2.3运行它,它会myAwesomePlot.html
在你的工作目录中产生一个:
library(gridSVG) library(ggplot2) library(XML) library(rjson) set.seed(955) dat <- data.frame(cond = rep(c("A", "B"), each=10), xvar = 1:20 + rnorm(20,sd=3), yvar = 1:20 + rnorm(20,sd=3)) g4 = ggplot(dat, aes(x=xvar, y=yvar)) + geom_smooth() + geom_point(shape=19, aes(color = cond), size=5) # what does this line do? It writes the SVG to the file "plot1.svg"? g4.svg <- grid.export("", addClasses=TRUE) # create a valid html file cat("", file="myAwesomePlot.html") # I'm assuming this gets the svg content and can write it to a file cat(saveXML(g4.svg$svg), file="myAwesomePlot.html", append=TRUE) cat( '', file="myAwesomePlot.html", append=TRUE ) cat( '' , file="myAwesomePlot.html", append=TRUE) cat( '\n' , file="myAwesomePlot.html", append=TRUE) cat('' , file="myAwesomePlot.html", append=TRUE) # close out file cat("", file="myAwesomePlot.html", append=TRUE)
原始答案
自从我完成任何R
编程以来已经有一段时间了,但这些cat
功能看起来并不合适.他们会写入标准输出,而不是写入文件.我的猜测是grid.export
只写svg
文件而其他一切都被删除了.我一眼就认为你打算运行这段代码:
R myRCode.R > outPutFile.svg
这样stdout就会重定向到一个文件中.
我尝试重新编译代码并将所有内容html
明确写入文件:
library(gridSVG) library(ggplot2) library(XML) library(rjson) set.seed(955) dat <- data.frame(cond = rep(c("A", "B"), each=10), xvar = 1:20 + rnorm(20,sd=3), yvar = 1:20 + rnorm(20,sd=3)) g4 = ggplot(dat, aes(x=xvar, y=yvar)) + geom_smooth() + geom_point(shape=19, aes(color = cond), size=5) g4 // what does this line do? It writes the SVG to the file "plot1.svg"? g4.svg <- grid.export("plot1.svg",addClasses=TRUE) // create a valid html file cat("", file="myAwesomePlot.html") // I'm assuming this gets the svg content and can write it to a file cat(g4.svg$svg, file="myAwesomePlot.html") cat( '', file="myAwesomePlot.html" ) // etc, rest of JavaScript // close out file cat("", file="myAwesomePlot.html")
您缺少指向D3.js库的链接!
cat
正如你所拥有的那样,在简单的R脚本中,只需输出到控制台,就像@Mark所说的那样.
要解决1)你的最终html文档必须包含:或等效文件.
要解决2),您可以使用Rmarkdown .Rmd文件并将所有内容放在一个块中.
在扩展名为.Rmd的文件中,使用以下行开始块:
```{r, echo=FALSE, results='asis', warning=FALSE, message=FALSE}
接下来,确保在此行中包含D3库:
cat('')
然后添加上面的所有代码,然后结束块:
```
如果您在Rstudio中执行此操作,则可以点击"编织HTML".否则,您可以使用knitr::knit2html
或rmarkdown::render
从控制台或另一个.R脚本)