使用grid和gridSVG与grob交互

时间:2014-08-07 17:18:12

标签: r

我实际上不知道这不起作用!

library(grid)
library(gridSVG)
grid.newpage()
vp <- viewport(width=0.7, height=0.7)
pushViewport(vp)

grid.rect(x = unit(0.5, "npc"), y = unit(0.5, "npc"),
      width = unit(0.5, "npc"), height = unit(0.5, "npc"),
      just = "centre", hjust = NULL, vjust = NULL,
      default.units = "npc", name = "grid.rect.1",
      gp=gpar(), draw = TRUE)

这有效:

grid.garnish("grid.rect.1",onmousedown="alert('alert 1!')","pointer-events"="all")
grid.export("gridSVG1.svg")

这不起作用

grid.garnish("grid.rect.1", onmouseover="allwhite()", redraw = TRUE)

grid.script("allwhite = function() {
anobject = document.getElementById('grid.rect.1.1');
anobject.setAttribute('style', 'fill:red');
}", name="allwhite")

grid.export("gridSVG2.svg") # saved to your current working directory

我想要实现的是,如果我用鼠标悬停在矩形上,矩形会用红色填充。

由于这是我第一次遇到js,我不得不问这个愚蠢的问题。我知道这个事实,我将样条命名为“grid.rect.1”,但在脚本部分使用“grid.rect.1.1”。这只是一个绝望的问题,因为事实上,如果我用Google Chrome检查SVG对象,我会发现rect有这个id。

我正在使用谷歌浏览器(36.0.1985.125米)观看SVG对象,似乎有点简单的事情

与往常一样,任何暗示都值得赞赏。

1 个答案:

答案 0 :(得分:2)

我看起来无法添加属性,因此您的rect需要填充gpar。您还需要修复rect元素的ID。如果查看源代码,您会看到“grid.rect.1.1”实际上是分组标记。

library(grid)
library(gridSVG)
grid.newpage()
vp <- viewport(width=0.7, height=0.7)
pushViewport(vp)

grid.rect(x = unit(0.5, "npc"), y = unit(0.5, "npc"),
      width = unit(0.5, "npc"), height = unit(0.5, "npc"),
      just = "centre", hjust = NULL, vjust = NULL,
      default.units = "npc", name = "grid.rect.1",
      gp=gpar(fill='white'),  # add fill parameter
      draw = TRUE)

grid.garnish("grid.rect.1", onmouseover="allwhite()", `pointer-events`='all')

grid.script("allwhite = function() {
anobject = document.getElementById('grid.rect.1.1.1');
anobject.setAttribute('style', 'fill:red');
}", name="allwhite")

grid.export("gridSVG2.svg")