我想提供一个超链接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包的作者之一:这里是他的(工作)答案:
我建议你试试这里的开发版本:
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
):
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