最近、ggplot2のファセットにテキストを追加することについてのブログ投稿を行いました(LINK)。このプロセスを少し自動化したかったので、次の関数を作成しました。使ってみるまでは大成功だったと思いましたparse=TRUE
。私の関数はこの引数を尊重していません。ブログ投稿で行ったように、関数内でこの引数を適切に使用するにはどうすればよいですか?
PSこれは完全に最小ではないことは知っていますが、実際の関数は他の人にとって役立つかもしれません。
qfacet_text <- function(ggplot2.object, x.coord, y.coord, labels = NULL,
text.df = NULL, ...) {
dat <- ggplot2.object$data
rows <- ggplot2.object$facet[[1]][[1]]
cols <- ggplot2.object$facet[[2]][[1]]
fcol <- dat[, as.character(cols)]
frow <- dat[, as.character(rows)]
len <- length(levels(fcol)) * length(levels(frow))
vars <- data.frame(expand.grid(levels(frow), levels(fcol)))
colnames(vars) <- c(as.character(rows), as.character(cols))
if (is.null(labels)) {
labels <- LETTERS[1:len]
}
if (length(x.coord) == 1) {
x.coord <- rep(x.coord, len)
}
if (length(y.coord) == 1) {
y.coord <- rep(y.coord, len)
}
if (is.null(text.df)) {
text.df <- data.frame(x = x.coord, y = y.coord, vars, labs=labels)
}
p <- ggplot2.object + geom_text(aes(x, y, label=labs, group=NULL),
data=text.df, ...)
print(p)
invisible(list(original = ggplot2.object, new = p, dat = text.df))
}
mtcars[, c("cyl", "am", "gear")] <- lapply(mtcars[, c("cyl", "am", "gear")], as.factor)
x <- ggplot(mtcars, aes(mpg, wt, group = cyl)) +
geom_line(aes(color=cyl)) +
geom_point(aes(shape=cyl)) +
facet_grid(gear ~ am) +
theme_bw()
z <- qfacet_text(x, 33, 2.2, 1:6, color="red") #as expected
z$dat[5, 1:2] <- c(15, 5)
qfacet_text(x, 33, 2.2, paste("beta ==", 1:6), text.df = z$dat,
size = 3, color = "grey50", parse = TRUE) #doesn't parse