使用RInside和Rcpp保存格子图

时间:2014-06-24 04:16:08

标签: r plot lattice rcpp rinside

我正在尝试使用RInside在C ++中构建一个R应用程序。我想使用代码

将图表保存为指定目录中的图像
png(filename = "filename", width = 600, height = 400)
xyplot(data ~ year | segment, data = dataset, layout = c(1,3), 
       type = c("l", "p"), ylab = "Y Label", xlab = "X Label",
       main = "Title of the Plot")
dev.off()

如果直接从R运行,它会在指定目录中创建一个png文件。但是使用来自RInside的C ++调用,我无法重现相同的结果。 (我可以使用C ++调用重现所有基础图。只有Lattice和ggplots的问题

我也使用了以下代码,

myplot <- xyplot(data ~ year | segment, data = dataset, layout = c(1,3), 
                 type = c("l", "p"), ylab = "Y Label", xlab = "X Label",
                 main = "Title of the Plot")
trellis.device(device = "png", filename = "filename")
print(myplot)
dev.off()
如果我在R中运行上面的代码没有任何问题,则会创建

png文件。但是从C ++调用开始,png文件带有标题和x-y标签的空面板正在创建,而不是完整的图。

我正在使用函数R.parseEval()进行对C的C ++调用。

如何正确获得正确的格子和ggplot2图?

1 个答案:

答案 0 :(得分:5)

以下内容将格子xyplot打印到png。这是一个最小的例子,作为变体完成 在rinside_sample11.cpp附近。

#include <RInside.h>                    // for the embedded R via RInside
#include <unistd.h>

int main(int argc, char *argv[]) {

  // create an embedded R instance
  RInside R(argc, argv);               

  // evaluate an R expression with curve() 
  // because RInside defaults to interactive=false we use a file
  std::string cmd = "library(lattice); "
    "tmpf <- tempfile('xyplot', fileext='.png'); "  
    "png(tmpf); "
    "print(xyplot(Girth ~ Height | equal.count(Volume), data=trees)); "
    "dev.off();"
    "tmpf";
  // by running parseEval, we get the last assignment back, here the filename
  std::string tmpfile = R.parseEval(cmd);

  std::cout << "Can now use plot in " << tmpfile << std::endl;

  exit(0);
}

它为我创建了这个文件:

enter image description here