函数absoluteGrob {ggplot2}显示了我无法调试的行为。我已经安装了ggplot2,我可以看到?absoluteGrob的帮助页面。
然而,当我试图使用它时,R找不到它:
> absoluteGrob
Error: object 'absoluteGrob' not found更具体地说,我尝试执行以下代码(从this answer 将一些图形绘制为x标签):
library(grid)
library(ggplot2)
library(grImport)
library(igraph)
npoints <- 3
y <- rexp(npoints)
x <- seq(npoints)
pics <- vector(mode="list", length=npoints)
for(i in 1:npoints){
fileps <- paste0("motif",i,".ps")
filexml <- paste0("motif",i,".xml")
# Postscript file
postscript(file = fileps, fonts=c("serif", "Palatino"))
plot(graph.ring(i), vertex.label.family="serif", edge.label.family="Palatino")
dev.off()
# Convert to xml accessible for symbolsGrob (my_axis)
PostScriptTrace(fileps, filexml)
pics[i] <- readPicture(filexml)
}
my_axis <- function () {
function(label, x = 0.5, y = 0.5, ...) {
absoluteGrob(
do.call("gList", mapply(symbolsGrob, pics[label], x, y, SIMPLIFY = FALSE)),
height = unit(1.5, "cm")
)
}
}
qplot(factor(c("a", "b", "c")), 1:npoints) + scale_x_discrete(labels= my_axis())但我知道错误是:
Error in scale$labels(breaks) : could not find function "absoluteGrob" 欢迎任何帮助(或替代)。
ggplot2版本:
ggplot2_1.0.1
编辑
即使在简单的情况下..。
它不起作用:
library(ggplot2)
absoluteGrob它确实:
library(ggplot2)
ggplot2:::absoluteGrob发布于 2015-04-30 15:48:48
您在帖子中链接到的答案是三年前发布的,自那时起,ggplot2中的许多内容都发生了变化。那时,ggplot2版本0.9.0还没有发布。
根据absoluteGrob的说法,它仍然是实验性的,这意味着在链接答案的时候,它确实是实验性的。此时,它可能是从ggplot2命名空间导出的,因此用户可以使用它。这就是为什么关联答案在当时起作用的原因。
但是,从1.0.1版本开始,它不会从ggplot2命名空间导出。因此,虽然您可以使用ggplot2:::absoluteGrob (它适用于非导出对象)和?absoluteGrob查看源代码和文档,但是即使通过ggplot2::absoluteGrob显式指定名称空间,也无法使用它。
根据消息来源,它只是使用gTree()调用grid包中的cl="absoluteGrob"。您可以尝试这样做,而不是直接调用absoluteGrob()。例如,尝试下面的内容,希望它能够模仿absoluteGrob()所期望的行为
grlist <- do.call("gList", mapply(symbolsGrob, pics[label], x, y, SIMPLIFY = FALSE))
gTree(children = grlist,
cl = "absoluteGrob",
height = unit(1.5, "cm"),
width = NULL,
xmin = NULL,
ymin = NULL,
vp = NULL)https://stackoverflow.com/questions/29971450
复制相似问题