gpt4 book ai didi

r - 带有 R 的多页 SVG

转载 作者:行者123 更新时间:2023-12-04 06:12:56 24 4
gpt4 key购买 nike

使用时 layoutlattice::xyplottrellis.device您可以在 PDF 中获取多个页面:

trellis.device(pdf, file="myfile.pdf")
data(mtcars)
xyplot(hp~mpg|gear, data=mtcars, layout=c(1, 1))
dev.off()

我想用同样的方法得到一个 multi-page SVG .我试过 cairo::svg , 和包 gridSVG , SVGAnnotation RSVGTipsDevice 没有成功:只有 trellis 的最后一页对象被保存。

有没有使用R代码的解决方案?

谢谢!

最佳答案

我终于决定直接问Paul Murrell ,网格的创造者和gridSVG .他好心地提供了一些很好的建议和代码,使用类似于@mbq 的建议的方法完全解决了问题。我修改了他的代码来编写这个函数:

library(gridSVG)
library(XML)

animateTrellis <- function(object, file='animatedSVG.svg',
duration=.1, step=2, show=TRUE){
nLayers <- dim(object)
stopifnot(nLayers>1)
for (i in seq_len(nLayers)){
p <- object[i]
label <- p$condlevels[[1]][i]
##Create intermediate SVG files
g <- grid.grabExpr(print(p, prefix=label),
name=label)
if (i==1){ ## First frame
ga <- animateGrob(g, group=TRUE,
visibility="hidden",
duration=duration, begin=step)
} else if (i==nLayers){ ##Last Frame
gg <- garnishGrob(g, visibility='hidden')
ga <- animateGrob(gg, group=TRUE,
visibility="visible",
duration=duration, begin=step*(i-1))
} else { ##any frame
gg <- garnishGrob(g, visibility='hidden')
gaV <- animateGrob(gg, group=TRUE,
visibility="visible",
duration=duration, begin=step*(i-1))
ga <- animateGrob(gaV, group=TRUE,
visibility="hidden",
duration=duration, begin=step*i)
}
grid.newpage()
grid.draw(ga)
fich <- tempfile(fileext='.svg')
gridToSVG(fich)

## Combine all
if (i==1) {
svgTop <- xmlParse(fich)
nodeTop <- getNodeSet(svgTop,
"//svg:g[@id='gridSVG']",
c(svg="http://www.w3.org/2000/svg"))[[1]]
} else {
svgChildren <- xmlParse(fich)
node <- getNodeSet(svgChildren,
"//svg:g[@id='gridSVG']/*",
c(svg="http://www.w3.org/2000/svg"))
addChildren(nodeTop, node)
}
unlink(fich)
}
saveXML(svgTop, file=file)
dev.off()
if (show) browseURL(file)
invisible(svgTop)
}

然后我可以生成带有动画的 SVG 文件:
p <- xyplot(Sepal.Length~Petal.Length|Species, data=iris, layout=c(1, 1))
animateTrellis(p, file='iris.svg')

关于r - 带有 R 的多页 SVG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7554162/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com