Это просто сделать, когда вы читаете ?print.trellis
. Особый интерес представляет параметр split
. Это может показаться сложным с первого взгляда, но это довольно просто, как только вы поймете, что это значит. Из документации:
split: вектор из 4 целых чисел, c (x, y, nx, ny), который говорит, чтобы расположить текущий график в позиции x, y в регулярном массиве nx по ny-графикам. (Примечание: это начало в верхнем левом углу)
blockquote>Вы можете увидеть пару реализаций на
example(print.trellis)
, но вот тот, который я предпочитаю:library(lattice) # Data w <- as.matrix(dist(Loblolly)) x <- as.matrix(dist(HairEyeColor)) y <- as.matrix(dist(rock)) z <- as.matrix(dist(women)) # Plot assignments pw <- levelplot(w, scales = list(draw = FALSE)) # "scales..." removes axes px <- levelplot(x, scales = list(draw = FALSE)) py <- levelplot(y, scales = list(draw = FALSE)) pz <- levelplot(z, scales = list(draw = FALSE)) # Plot prints print(pw, split = c(1, 1, 2, 2), more = TRUE) print(px, split = c(2, 1, 2, 2), more = TRUE) print(py, split = c(1, 2, 2, 2), more = TRUE) print(pz, split = c(2, 2, 2, 2), more = FALSE) # more = FALSE is redundant
Приведенный выше код дает вам эту цифру:
Как вы можете видеть,
split
принимает четыре параметра. последние два относятся к размеру вашего кадра (аналогично тому, как это делаетmfrow
), тогда как первые два параметра позиционируют ваш график вnx
наny
.
В качестве альтернативы вышеуказанному правильному ответу, вы также можете использовать модуль Renderer для достижения того же. this.renderer.listen('keyup', target, callbackfn)
; Вместо того, чтобы вручную добавлять слушателей, вы позволяете angular создавать и уничтожать слушателей.
Назовите это так
body.addEventListener('keyup', (ev) => this.moveAvatar(ev));
(ИЛИ)
body.addEventListener('keyup', this.moveAvatar.bind(this));