我正在编写一个 java web 应用程序,用户可以在其中选择和绘制数据。这些图是用 R 生成的,并导出为 SVG。我想知道是否有一种方法可以直接返回 SVG 输出流,而不必编写文件并在 java 中读取该文件。
所以不要这样做:
svg("uniqueName.svg")
plot(someData)
dev.off()
然后必须在 Java 中读取文件,我只想将 SVG 的 XML 数据打印到控制台。
这可能吗?
您可以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,格子)......