此代码在 R 中运行良好
library(ggplot2);
tbl <- data.frame( name = c ("AAA", "BBB"), qty = c(100, 150) );
p <- ggplot(data = tbl ) + geom_bar(stat='identity', aes(x =name, y = qty));
png(file='sample.png', bg ='transparent', width = 300, height = 300 );
p;
dev.off();
但是,如果我像这样从 C++ 评估这段代码:
std::string code =""
"library(ggplot2);"
"tbl <- data.frame( name = c ("AAA", "BBB"), qty = c(100, 150) );"
"p <- ggplot(data = tbl ) + geom_bar(stat='identity', aes(x =name, y = qty));"
"png(file='sample.png', bg ='transparent', width = 300, height = 300 );"
"p;"
"dev.off();"
myR.parseEval( code );
未创建 png 文件。
我调查了这个问题,发现这个问题取决于 ggplot2。例如简单的代码:
std::string code =""
"png(file='sample.png', bg ='transparent', width = 300, height = 300 );"
"plot( 1:20 );"
"dev.off();"
效果很好。如果我使用“网格”包中的 grid.circle() 也会创建文件。ggsave() 函数也很好用。
为什么ggplot不能通过图形设备创建文件?