Getting ggvis::export_png() working

对着背影说爱祢 提交于 2019-12-19 07:53:06

问题


Goal

Export a ggvis figure as a PNG file (for inclusion in an .Rmd document).

Problem

I know essentially nothing about Node.js, other than that it is great and I should know more.

I get as far as:

library(ggvis)
mtcars %>% ggvis(~mpg, ~wt) %>% export_png()
Writing to file plot.png
Guessing layer_points()

module.js:340
    throw err;
          ^
Error: Cannot find module 'd3'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (/usr/local/src/vega/index.js:11:6)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)

Setup

Platform

  • OS X Mavericks (10.9.5)
  • RStudio (0.98.945)
  • Used devtools::install_github("hadley/ggvis") to install ggvis (0.3.0.9001) and dependencies
  • Cloned https://github.com/trifacta/vega to /usr/local/src/vega
  • Symlinked ./bin/vg2png -> /usr/local/src/vega/bin/vg2png

sessionInfo()

sessionInfo()
R version 3.1.0 (2014-04-10)
Platform: x86_64-apple-darwin13.1.0 (64-bit)

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] graphics  grDevices utils     datasets  stats     methods   base     

other attached packages:
[1] knitr_1.6        pander_0.3.8     ggvis_0.3.0.9001 lubridate_1.3.3  dplyr_0.2.0.9001 plyr_1.8.1       stringr_0.6.2    ggplot2_1.0.0    devtools_1.5    

loaded via a namespace (and not attached):
 [1] assertthat_0.1   bitops_1.0-6     caTools_1.17     colorspace_1.2-4 DBI_0.3.0        digest_0.6.4     evaluate_0.5.5   formatR_0.10     grid_3.1.0      
[10] gtable_0.1.2     htmltools_0.2.4  httpuv_1.3.0     httr_0.5.0.9000  jsonlite_0.9.11  lazyeval_0.1.1   magrittr_1.0.1   MASS_7.3-33      memoise_0.2.1   
[19] munsell_0.4.2    parallel_3.1.0   proto_0.3-10     Rcpp_0.11.2      RCurl_1.95-4.3   reshape2_1.4     RJSONIO_1.3-0    scales_0.2.4     shiny_0.10.1    
[28] tools_3.1.0      whisker_0.3-2    xtable_1.7-3    

回答1:


There are a few moving targets which need to be pinned down to get ggvis and the export_ tools working.

Vega 2+ series releases don't accept the json ggvis generates for the vg2XXX commands, which are used for the exporting, so vega needs to be pinned to v1.5.4 which is the last of the v1 series. The problem with that is nodejs 4.x+ wont install vega@1.5.4 and requires the newer vega versions. Thankfully we can use node version manager (nvm) to pin the node version to node 0.12.7 which allows us to install vega.

What a PITA, yes? If you do this within a scriptable container (like with a Rocker container) environment it is much easier. I've been using a Rstudio setup that includes this dockerfile containing these pertinent lines...

RUN \
# Vega 2 doesn't accept the json ggvis generates when trying to use vg2XXX
# commands so vega needs to be pinned. nodejs 4.x wont install vega@1.5.4...
mkdir .local/lib/nvm; \
ln -s .local/lib/nvm .nvm; \
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.29.0/install.sh | bash; \
. .nvm/nvm.sh; \
sudo bash -c ". .nvm/nvm.sh;\
 nvm install 0.12.7;\
 nvm alias default 0.12.7;\
 npm install --silent vega@1.5.4;"; \
ln -s -t ~/.local/bin ~/node_modules/vega/bin/*


来源:https://stackoverflow.com/questions/25999741/getting-ggvisexport-png-working

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!