如何用超链接提供ggplot2图形?

我正在尝试用超链接提供ggplot2图:

这工作:

library(gridSVG)
library(lattice)

xyplot(mpg~wt, data=mtcars, main = "Link to R-project home")
mainGrobName <- grep("main", grid.ls()[[1]], value=TRUE)
grid.hyperlink(mainGrobName, "http://www.r-project.org")
gridToSVG("HyperlinkExample.svg")

这不是:

p = ggplot(mtcars, aes(wt, mpg)) + geom_point()+ labs(title="link")
print(p)
mainGrobName <- grep("title", grid.ls()[[1]], value=TRUE)
grid.hyperlink(mainGrobName, "http://www.r-project.org")
gridToSVG("HyperlinkExample.svg")

任何提示?


我已经问过gridSVG软件包的作者之一Simon Potter:这是他的(工作)答案:

我建议你在这里尝试一下开发版本:

http://r-forge.r-project.org/R/?group_id=1025

它包含一个专门用于处理gTables(因此ggplot2图形)的解决方法。

因此,要尝试让您的示例工作,请启动一个新的R会话并运行以下代码:

install.packages("gridSVG", repos="http://R-Forge.R-project.org")
library(gridSVG)
library(ggplot2)
(p <- ggplot(mtcars, aes(wt, mpg)) + geom_point() + labs(title="link"))
titleGrobName <- grep("title", grid.ls(print=FALSE)$name, value=TRUE)
grid.hyperlink(titleGrobName, "http://www.r-project.org/")
gridToSVG("HyperlinkExample.svg", "none", "none")

这里唯一真正的区别是给gridToSVG()的附加参数。 这主要是为了减少输出到SVG文件和一个HTML包装器(否则你也会得到一些JSON数据,这对你的例子没有用)。


至于得到正确的mainGrobName这段代码将会成功(并且不会通过设置print=FALSE创建mainGrobName分心的副作用):

grep("title", grid.ls(print=FALSE)$name, value=TRUE)
#[1] "title.2-4-2-4"

绘图对象的结构显然比栅格情况更复杂,并且gridToSVG默认不会捕获它:

grep("title", grid.ls()$name, value=TRUE)
#--------------------
GRID.gTableParent.125
  background.1-5-6-1
  spacer.4-3-4-3
  panel.3-4-3-4
    grill.gTree.103
      panel.background.rect.94
      panel.grid.minor.y.polyline.96
      panel.grid.minor.x.polyline.98
      panel.grid.major.y.polyline.100
      panel.grid.major.x.polyline.102
    geom_point.points.90
    panel.border.zeroGrob.91
  axis-l.3-3-3-3
    axis.line.y.zeroGrob.113
    axis
  axis-b.4-4-4-4
    axis.line.x.zeroGrob.107
    axis
  xlab.5-4-5-4
  ylab.3-2-3-2
  title.2-4-2-4

这也是一个有趣的输出,但我无法看到如何让gridToSVG将其转换为有用的HTML对象:

grid.ls( print=pathListing )$name
链接地址: http://www.djcxy.com/p/67953.html

上一篇: How to furnish a ggplot2 figure with a hyperlink?

下一篇: Why does raytracer render spheres as ovals?