Как использовать объект "рисунок" в качестве символа в ключе графика?
Я создаю график, используя xyplot() из решетки, и использую пакет grImport для построения изображения в виде графических символов с помощью grid.symbols().
Это краткая версия кода для моего графика, где "mypic" - это объект изображения (созданный с помощью grImport), который я использую в качестве символа построения.
xyplot(y~x, data=dat,
panel=function(x, y, ...) {
grid.symbols(mypic, x, y, units = "native",
size = unit(10, "mm"),
use.gc = FALSE,
gp = gpar(col = "white", fill = c("red","blue")))
})
Я хочу создать легенду, которая показывает тот же символ построения, который я использовал на графике. Я думал, что-то вроде этого будет работать:
key = list(...
points = list(pch = grid.picture(mypic))
)
но это не так.
Итак, мой вопрос: как передать объект-изображение в аргумент "ключ", чтобы использовать его в качестве символа в ключе?
1 ответ
Насколько я знаю, нет возможности передать вашу фотографию от grImport
в key
без изменения кода.
У меня есть решение, хотя оно довольно специальное, особенно потому, что изображения в ключе перемещаются, тогда размер изображения изменяется. (Я думаю, что это можно исправить, если приложить некоторые усилия.) В любом случае, используя key
(или же auto.key
) и вручную разместив изображения на ключе, вы получите что-то близкое к желаемому результату.
library(lattice)
library(grImport)
dat <- data.frame(x = rnorm(10), y = rnorm(10), ind = c("A", "B"))
PostScriptTrace("petal.ps") # from https://www.jstatsoft.org/article/view/v030i04
petal <- readPicture("petal.ps.xml")
xyplot(y ~ x, groups = ind, data = dat,
auto.key = list(points = FALSE),
panel = function(x, y, ...) {
grid.symbols(petal, x, y, units = "native",
size = unit(4, "mm"),
use.gc = FALSE,
gp = gpar(col = "white", fill = c("red","blue")))
})
grid.symbols(petal, c(0.55, 0.55), c(0.92, 0.95),
size = unit(4, "mm"),
use.gc = FALSE,
gp = gpar(col = "white", fill = c("red","blue")))