如何打印R的svg()输出而不是写入文件?

时间:2013-11-04 12:13:13

标签: java r svg

我正在编写一个java web应用程序,用户可以在其中选择和绘制数据。这些图用R生成,并导出到SVG。我想知道是否有办法直接返回SVG输出流,而不必编写文件并在java中读取该文件。

所以不要这样做:

svg("uniqueName.svg")
plot(someData)
dev.off()

然后不得不用Java读取文件,我想将SVG的XML数据打印到控制台。

这可能吗?

1 个答案:

答案 0 :(得分:1)

您可以使用grid.export包中的fridSVG。它生成当前网格页面的SVG版本。这是一个例子:

library(gridSVG)
library(ggplot2)
qplot(Sepal.Length, Petal.Length, data = iris, color = Species)

ll <- grid.export()  ## without parameter to save the result a sa list
head(ll$svg)
#   $metadata
#   <metadata xmlns:gridsvg="http://www.stat.auckland.ac.nz/~paul/R/gridSVG/">
#     <gridsvg:generator name="gridSVG" version="1.3-1" time="2013-11-04 13:48:22"/>
#     <gridsvg:argument name="name" value="Rplots.svg"/>
#     <gridsvg:argument name="exportCoords" value="none"/>
#     <gridsvg:argument name="exportMappings" value="none"/>
#     <gridsvg:argument name="exportJS" value="none"/>
#     <gridsvg:argument name="res" value="72"/>
#     <gridsvg:argument name="prefix" value=""/>
#     <gridsvg:argument name="addClasses" value="FALSE"/>
#     <gridsvg:argument name="indent" value="TRUE"/>
#     <gridsvg:argument name="htmlWrapper" value="FALSE"/>
#     <gridsvg:argument name="usePaths" value="vpPaths"/>
#     <gridsvg:argument name="uniqueNames" value="TRUE"/>
#     <gridsvg:separator name="id.sep" value="."/>
#     <gridsvg:separator name="gPath.sep" value="::"/>
#     <gridsvg:separator name="vpPath.sep" value="::"/>
#     </metadata> 
#     
#     attr(,"class")
#   [1] "XMLInternalNodeList" "XMLNodeList"   

PS :这不适用于基本图形,但适用于任何基于网格的绘图(网格,ggplot2,点阵)......