Как использовать объект "рисунок" в качестве символа в ключе графика?

Я создаю график, используя 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")))

Imgur

Другие вопросы по тегам