ggplot2:annotation_custom给出一个空图层

时间:2013-01-18 01:36:04

标签: r ggplot2

一些测试数据:

ltd <- data.frame(r = c(rnorm(10), f1 = c(rep("L", 5), rep("H", 5)),
       f2 = rep(c("A", "B"), 5))

最小功能:

tf <- function(formula = NULL, data = NULL) {

res <- as.character(formula[[2]]) # clean & prep data
fac1 <- as.character(formula[[3]][2])
fac2 <- as.character(formula[[3]][3])

counts <- count(data, vars = c(fac2, fac1)) # get table data ready
colnames(counts) <- c(fac2, fac1, "count")
myt <- tableGrob(counts, show.box = TRUE,
    show.rownames = FALSE, show.colnames = TRUE,
    show.csep = TRUE, show.rsep = TRUE,
    separator = "black")

p <- ggplot()
p <- p + geom_point(data = data, 
    aes_string(x = fac1, y = res, color = fac2, group = fac2))      
p <- p + annotation_custom(myt) # comment out and it works
}

运行它:

require("plyr")
require("gridExtra")
require("ggplot2")
tmp <- tf(formula = r~f1*f2, data = ltd)
print(tmp)

提供Error in if (nrow(layer_data) == 0) return() : argument is of length zero

如果你打印tableGrob它确实存在,所以我不确定这里发生了什么。如果你注释掉annotation_custom它有效,我想我正在关注这些文档。谢谢。 (ggplot2_0.9.3)

1 个答案:

答案 0 :(得分:3)

以下是您的问题的解决方案:我将您的data=aes_string电话重新定位到主ggplot电话。我不知道为什么这很重要,但现在情节打印没有错误。

p <- ggplot(data=data, aes_string(x=fac1, y=res, color=fac2, group=fac2)) + 
     geom_point() +
     annotation_custom(myt)

enter image description here