Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >带R的多页SVG

带R的多页SVG
EN

Stack Overflow用户
提问于 2011-09-26 11:08:01
回答 1查看 674关注 0票数 2

当在lattice::xyplottrellis.device中使用layout时,你可以在一个PDF中获得几个页面:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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,包gridSVGSVGAnnotationRSVGTipsDevice都没有成功:只保存了trellis对象的最后一页。

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

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2011-11-12 18:20:04

我最终决定直接请教grid和gridSVG的创建者Paul Murrell。他亲切地提供了一些很好的建议和代码,用类似于@mbq的建议的方法完全解决了这个问题。我修改了他的代码,编写了这个函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
p <- xyplot(Sepal.Length~Petal.Length|Species, data=iris, layout=c(1, 1))
animateTrellis(p, file='iris.svg')
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7554162

复制
相关文章
R可视乎|分面一页多图
双变量数据可视化可能对于我们比较简单, 但是如果变量是三个或者更多,怎么在一幅图一起显示呢?今天我们就来讨论这个问题,解决方案有两种。
庄闪闪
2021/04/09
1.5K0
R语言之可视化①⑥一页多图(2)目录
cowplot包是ggplot2的简单附加组件。 它旨在为ggplot2提供一个出版物就绪的主题,这个主题需要最少量的轴标签尺寸,情节背景等。对'ggplot2'库的一些有用的扩展和修改。 特别是,这个软件包可以很容易地将多个'ggplot2'图组合成一个并用字母标记它们,例如 A,B,C等,这是科学出版物经常需要的。 该软件包还提供了一个流线型和干净的主题,用于Wilke实验室,因此包名称代表Claus O. Wilke的绘图库。
用户1359560
2018/12/14
1K0
R语言之可视化①⑥一页多图(2)目录
R语言可视化——图表排版之一页多图
昨天跟大家分享了关于图表嵌套的函数用法,今天跟大家分享在多图情况下如何正确的进行图表的版面布局。 这里要分享的图表版面设计其实就是指,在做了很多图的情况下,如何将诸多图表合理的布局在一张大的版面上,而不是一幅一幅的导出最后在其他软件中手动拼凑。 这个技能在制作多图仪表盘场景下,将会特别有用: 还需要强调下这里所指的一页多图与我们之前介绍过的分面可是大有不同,分面其实是一幅图表中,将分类变量所构成的分类图表分图呈现,但是本质上所有分面内的单个图表共享标题、图例、坐标轴刻度(虽然可以手动定义)。 也就是说分面的
数据小磨坊
2018/04/11
2K0
R语言可视化——图表排版之一页多图
R语言之可视化①④一页多图(1)目录
这里要分享一页多图其实就是指,在做了很多图的情况下,如何将诸多图表合理的布局在一张大的版面上,而不是一幅一幅的导出最后在其他软件中手动拼凑。这个技能在制作多图仪表盘场景下,将会特别有用。还需要强调下这里所指的一页多图与我们之前介绍过的分面可是大有不同,分面其实是一幅图表中,将分类变量所构成的分类图表分图呈现,但是本质上所有分面内的单个图表共享标题、图例、坐标轴刻度(虽然可以手动定义)。也就是说分面的图表类型与诸多元素都是一样的,但是分面解决不了不同图表的排版布局问题:比如单独绘制而成的一幅散点图、柱形图和一幅饼图,分面将无能为力。
用户1359560
2018/12/14
8950
R语言之可视化①④一页多图(1)目录
SVG - 基本的SVG属性
SVG - 基本的SVG属性 HTML5学堂:在前一篇文章当中,我们讲解了SVG的基本知识,并且为大家介绍了如何在html文件当中书写SVG代码。今天我们具体讲解SVG的基本属性,如何使用SVG完成线、圆等图形的绘制。 line - 直线 拥有四中基本属性 x1 属性在 x 轴定义线条的开始 y1 属性在 y 轴定义线条的开始 x2 属性在 x 轴定义线条的结束 y2 属性在 y 轴定义线条的结束 demo <line x1 = "20" y1 = "20" x2 = "200" y2 = "180" st
HTML5学堂
2018/03/12
4.1K0
导出excel多sheet页
最近碰到这样一个需求,就是任课教师需要把自己所教学科的学生的每次作业全部导出来。每一个教师不可能只教一个班,可能带多个班。那么导出的成绩就想是多个班的学生每次作业成绩。这样就用到了excel的sheet页。
微醺
2020/06/17
1.9K0
webpack打包多页应用
目录结构 │ package.json │ webpack.config.js │ └─src index.html index.js other.html other.js 项目有两个入口文件,对应两个html 我们在webpack.config.js进行如下配置 let path = require('path') let HtmlWebpackPlugin = require('html-webpack-plugin') modul
切图仔
2022/09/08
2440
【前端词典】单页应用 VS 多页应用
最近看到一些人在问单页面和多页面应用的区别。因为最近在整理 Vue 相关的内容,所以也就输出这一篇短文希望可以给你一个整体的认识。
小生方勤
2019/06/19
1.9K0
【前端词典】单页应用 VS 多页应用
【前端词典】单页应用 VS 多页应用
最近看到一些人在问单页面和多页面应用的区别。因为最近在整理 Vue 相关的内容,所以也就输出这一篇短文希望可以给你一个整体的认识。
用户1462769
2019/08/13
1.8K0
【前端词典】单页应用 VS 多页应用
vue单页应用和多页应用_多页面应用需要vuejs吗
进入一家新的公司,要开发移动端app项目,前端技术选型时前端组长选的是vue的多页面开发,当时很蒙,vue不是单页面开发吗?咋出来多页面的。接触之后才发现确实存在也挺简单的,省去了路由表的配置。那就给大家整体思路分析一波吧。不足之处还请包涵!
全栈程序员站长
2022/11/08
7920
vue单页应用和多页应用_多页面应用需要vuejs吗
SVG + 动画 实现一个有个性的404页面
看了张鑫旭老师的博客《理解SVG transform坐标变换》,由于SVG元素的默认是SVG左上角为中心变换的。 实现SVG元素居中缩放的效果,可以使用translate手动偏移,先偏移回原点,缩放旋转后再偏移回来
狂奔滴小马
2021/11/15
4320
SVG + 动画 实现一个有个性的404页面
SVG + 动画 实现一个有个性的404页面
我们的博客网站有时候 404 页面比较普通,我们可以通过 SVG 加动画来实现一个有个性的页面
狂奔滴小马
2022/04/20
5700
SVG + 动画 实现一个有个性的404页面
「R」R传统图形绘制多图
mfrow 和 mfcol 都由 2 个数字指定,一个表示行数、一个表示列数。如果使用 mfrow,那么图像区域会被按行依次使用;如果使用 mfcol,那么图像区域会按列依次使用。
王诗翔呀
2020/07/06
7210
「R」R传统图形绘制多图
R将SVG文件转换成pdf或者png
svg是一种矢量图文件,一般的图片查看工具是无法打开的。那么如何正常打开svg格式的文件?下面小编就给大家介绍一下打开svg格式文件的方法,希望对大家有所帮助。
生信交流平台
2022/09/21
1.2K0
R将SVG文件转换成pdf或者png
R tips:多版本R共存的library的依赖冲突
前一段时间,安装了R4.0,然后就发现R包各种出错,要求重装,好不容易装好了R包,再转回R3.6.3时,发现R3.6.3的R包又出现了问题。报错信息大概类似下图:
生信菜鸟团
2021/01/18
2.4K0
R tips:多版本R共存的library的依赖冲突
SVG - 创建SVG图片
SVG - 创建SVG图片 HTML5学堂:之前在绘图中使用到了SVG以及Canvas,因此决定最近将绘图类的知识和大家分享一下。从研究角度来说,SVG比Canvas要难很多。没有合适的中文文档,自己只能去翻译英文文档(唉,英语不好啊)。今天先来说说SVG的基本知识以及创建SVG的基本方法。 SVG是什么 W3C推荐的网页图形格式,类似于Flash,SVG是一种描述二维矢量图形的标记语言,但它是一种开发的以XML为基础的语言,不是一种私有语言。 SVG的支持程度 IE8-以及Android 2.3默认浏览器
HTML5学堂
2018/03/12
4.1K0
类webpack模板的多页Vue项目模板
本脚手架并且适当简化了一些功能(删除了测试库) 并引入了外部mock和axios两个常用库可以灵活配置。 这里写一下说明文件和心得体会 配置功能 最基本的功能为webpack3+Vue2的基础上引入了外部组件库elementUI 其实也可以灵活修改为别的,css的支持仅引入了less和sass,相信这两者用的人也是最多的。还有一点是针对多页面也引入了vue-router, 也就是说这个多页面仓库也可以当单页面来搞起。 加入的axios库是本地业务所需,这个可以在生成脚手架时不选择,但这个作为Vue的推荐库,
卡少
2018/05/16
2K0
SVG绘图-SVG.js
官方文档:https://svgjs.dev/docs/3.0/getting-started/
码客说
2021/12/05
6.3K0
SVG绘图-SVG.js
SVG之旅:SVG的图层和渲染顺序
不管是在制图软件中还是Web页面的DOM元素,都有层的概念。在制图软件中,大家比较熟悉,能非常的清晰的看出图层的概念。而在Web页面中,特别是我们熟悉的HTML的DOM中,其实他也有层的概念。不同的是制图软件可以用鼠标拖动图层来改变层次,而DOM中需要依赖于CSS的属性来控制他的层次关系。其实在SVG中,他也有层和渲染顺序的概念。今天我们就来看看SVG中的图层和渲染顺序相关的知识。 SVG的图层 首先我们来看SVG图层这个东东,相信只要使用过制图软件,比如Photoshop或者Sketch等,对于图层的认识
企鹅号小编
2018/02/28
7.1K0
SVG之旅:SVG的图层和渲染顺序
matplotlib实现一页多图
直接指定是在创建figure的时候,就直接定义好多个axes的排列方式;动态增加则是根据需要在figure上添加axes。下面来具体看下用法
生信修炼手册
2020/09/04
8690
matplotlib实现一页多图

相似问题

SVG多页

16

SVG到多页PDF

12

浏览器中的多页SVG

131

使用libcairo和Haskell的多页SVG

26

带多页序列的FOP - OutofMemoryError

211
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文