2

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

所以不要这样做:

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

然后必须在 Java 中读取文件,我只想将 SVG 的 XML 数据打印到控制台。

这可能吗?

4

1 回答 1

1

您可以grid.exportfridSVG包中使用。它生成当前网格页面的 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,格子)......

于 2013-11-04T12:51:12.290 回答