Итак, я мало что знаю о том, КАКОЙ КОД определяет или потребляет hjust / vjust, но, используя TextMate «Найти в проекте» (в каталоге ggplot2 / R /) для hjust, я не вижу строк, которые выглядят как будто они являются определением или реализацией hjust ... просто места, где он указан как действительный и где он передается.
Это заставляет меня хотеть читать сетку ...
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, и просто, hjust и vjust просто передаются в него ... off to 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>
итак, это гроб ........... прочь гроб ......
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>
Ничего особо полезного там нет, так что я в Google
R сетка должна быть
и после переопределения автозамены Google моего поиска, я нахожу
http://rwiki.sciviews.org/doku.php?id=tips:graphics-grid:hvjust
Оглядываясь назад на книгу Хэдли, я замечаю, что ссылка на стр. 196 на самом деле не НАМЕРЕНИЕ или просто ... просто оправдание.
Чтение документации для
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 являются только числовыми и могут переопределять только
- если вы попытаетесь использовать для них строки, они могут «работать», но выдают предупреждения
Итак, давайте посмотрим на демонстрационный код 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 <= x <= 1), и что если вы хотите использовать строки, Вы должны использовать параметр just .... </p>