所以,我不太了解 WHAT CODE 定义或使用 hjust/vjust,但是使用 TextMate 的“在项目中查找”(在 ggplot2/R/ 目录中)进行 hjust,我看不到任何看起来就像它们是 hjust 的定义或实现......只是它被列为有效 aes 并被传递的地方。
这让我想去阅读网格......
http://stat.ethz.ch/R-manual/R-patched/library/grid/html/grid.text.html
这让我想了解更多关于 grid.text 是如何定义的
R> grid.text
function (label, x = unit(0.5, "npc"), y = unit(0.5, "npc"),
just = "centre", hjust = NULL, vjust = NULL, rot = 0, check.overlap = FALSE,
default.units = "npc", name = NULL, gp = gpar(), draw = TRUE,
vp = NULL)
{
tg <- textGrob(label = label, x = x, y = y, just = just,
hjust = hjust, vjust = vjust, rot = rot, check.overlap = check.overlap,
default.units = default.units, name = name, gp = gp,
vp = vp)
if (draw)
grid.draw(tg)
invisible(tg)
}
<environment: namespace:grid>
所以,它是一个 textGrob,而 just、hjust 和 vjust 只是简单地被传递给它...关闭到 textGrob
R> textGrob
function (label, x = unit(0.5, "npc"), y = unit(0.5, "npc"),
just = "centre", hjust = NULL, vjust = NULL, rot = 0, check.overlap = FALSE,
default.units = "npc", name = NULL, gp = gpar(), vp = NULL)
{
if (!is.unit(x))
x <- unit(x, default.units)
if (!is.unit(y))
y <- unit(y, default.units)
grob(label = label, x = x, y = y, just = just, hjust = hjust,
vjust = vjust, rot = rot, check.overlap = check.overlap,
name = name, gp = gp, vp = vp, cl = "text")
}
<environment: namespace:grid>
所以,这是一个 grob............ 去 grob......
R> grob
function (..., name = NULL, gp = NULL, vp = NULL, cl = NULL)
{
g <- list(..., name = name, gp = gp, vp = vp)
if (!is.null(cl) && !is.character(cl))
stop("Invalid 'grob' class")
class(g) <- c(cl, "grob", "gDesc")
validGrob(g)
}
<environment: namespace:grid>
那里没什么帮助,所以我谷歌了
R grid hjust vjust
在覆盖 Google 对我的搜索的自动更正后,我发现
http://rwiki.sciviews.org/doku.php?id=tips:graphics-grid:hvjust
回顾哈德利的书,我注意到第 196 页的参考实际上并没有提及 hjust 或 vjust... 只是证明。
阅读文档
R> ?textGrob
我明白了
just The justification of the text relative to its (x, y) location. If there are two values, the first value specifies horizontal justification and the second value specifies vertical justification. Possible string values are: "left", "right", "centre", "center", "bottom", and "top". For numeric values, 0 means left alignment and 1 means right alignment.
hjust A numeric vector specifying horizontal justification. If specified, overrides the just setting.
vjust A numeric vector specifying vertical justification. If specified, overrides the just setting.
所以,这是我的想法。
- just 参数可以是字符串或数字
- hjust 和 vjust 只是数字,可以覆盖 just
- 如果您尝试为它们使用字符串,它可能“有效”,但会引发警告
所以,让我们看看 grid.text 演示代码,特别是 draw.text 函数,他们在其中使用并且似乎成功地使用了字符串值:
grid.newpage()
x <- stats::runif(20)
y <- stats::runif(20)
rot <- stats::runif(20, 0, 360)
grid.text("SOMETHING NICE AND BIG", x=x, y=y, rot=rot,
gp=gpar(fontsize=20, col="grey"))
grid.text("SOMETHING NICE AND BIG", x=x, y=y, rot=rot,
gp=gpar(fontsize=20), check=TRUE)
grid.newpage()
draw.text <- function(just, i, j) {
grid.text("ABCD", x=x[j], y=y[i], just=just)
grid.text(deparse(substitute(just)), x=x[j], y=y[i] + unit(2, "lines"),
gp=gpar(col="grey", fontsize=8))
}
x <- unit(1:4/5, "npc")
y <- unit(1:4/5, "npc")
grid.grill(h=y, v=x, gp=gpar(col="grey"))
draw.text(c("bottom"), 1, 1)
draw.text(c("left", "bottom"), 2, 1)
draw.text(c("right", "bottom"), 3, 1)
draw.text(c("centre", "bottom"), 4, 1)
draw.text(c("centre"), 1, 2)
draw.text(c("left", "centre"), 2, 2)
draw.text(c("right", "centre"), 3, 2)
draw.text(c("centre", "centre"), 4, 2)
draw.text(c("top"), 1, 3)
draw.text(c("left", "top"), 2, 3)
draw.text(c("right", "top"), 3, 3)
draw.text(c("centre", "top"), 4, 3)
draw.text(c(), 1, 4)
draw.text(c("left"), 2, 4)
draw.text(c("right"), 3, 4)
draw.text(c("centre"), 4, 4)
现在请注意,如果我将 draw.text 更改为使用 hjust 和 vjust AS STRINGS
grid.newpage()
x <- stats::runif(20)
y <- stats::runif(20)
rot <- stats::runif(20, 0, 360)
grid.text("SOMETHING NICE AND BIG", x=x, y=y, rot=rot,
gp=gpar(fontsize=20, col="grey"))
grid.text("SOMETHING NICE AND BIG", x=x, y=y, rot=rot,
gp=gpar(fontsize=20), check=TRUE)
grid.newpage()
draw.text <- function(just, i, j) {
grid.text("ABCD", x=x[j], y=y[i], hjust=just[1], vjust=just[2])
grid.text(deparse(substitute(just)), x=x[j], y=y[i] + unit(2, "lines"),
gp=gpar(col="grey", fontsize=8))
}
x <- unit(1:4/5, "npc")
y <- unit(1:4/5, "npc")
grid.grill(h=y, v=x, gp=gpar(col="grey"))
draw.text(c("bottom"), 1, 1)
draw.text(c("left", "bottom"), 2, 1)
draw.text(c("right", "bottom"), 3, 1)
draw.text(c("centre", "bottom"), 4, 1)
draw.text(c("centre"), 1, 2)
draw.text(c("left", "centre"), 2, 2)
draw.text(c("right", "centre"), 3, 2)
draw.text(c("centre", "centre"), 4, 2)
draw.text(c("top"), 1, 3)
draw.text(c("left", "top"), 2, 3)
draw.text(c("right", "top"), 3, 3)
draw.text(c("centre", "top"), 4, 3)
draw.text(c(), 1, 4)
draw.text(c("left"), 2, 4)
draw.text(c("right"), 3, 4)
draw.text(c("centre"), 4, 4)
长话短说:我认为当你使用 hjust 或 vjust 作为字符串时,你违反了文档(它的值应该是数字 0