Это сообщение связано с question Я спросил пару дней назад, и конкретно об этом post (из которого я одолжил код ниже). Я чувствовал, что это требует нового вопроса, потому что это новый вопрос.R: Создание списка png-растеров, чтение в grid.raster
Я пытаюсь построить график в ggplot2 с настраиваемыми изображениями для geom_point, а затем вставить эти изображения в легенду. Однако, когда я помещаю растровые изображения в список и ссылочные элементы этого списка в grid.raster, он выдает ошибку. Есть ли способ сохранить png-растры в списке, чтобы их можно было вызвать из grid.raster позже? Вот пример ...
library(png)
library(ggplot2)
library(grid)
# Get image
img <- readPNG(system.file("img", "Rlogo.png", package="png"))
# Grab online image
url <- "https://www.rstudio.com/wp-content/uploads/2014/06/RStudio-Ball.png"
destfile <- "myfile.png"
r_studio <- download.file(url, destfile, mode="wb")
r_studio <- readPNG("myfile.png")
# Put images in list
image_list <- list(img, r_studio)
# Plot
p = ggplot(mtcars, aes(mpg, disp, colour = factor(vs))) +
geom_point() +
theme(legend.key.size = unit(1, "cm"))
# Get ggplot grob
gt = ggplotGrob(p)
grid.newpage()
grid.draw(gt)
# Search using regular expressions
Tree = as.character(current.vpTree())
pos = gregexpr("\\[key.*?\\]", Tree)
match = unlist(regmatches(Tree, pos))
match = gsub("^\\[(key.*?)\\]$", "\\1", match) # remove square brackets
match = match[!grepl("bg", match)] # removes matches containing bg
# Loop through image list. Change the legend keys to images
for(i in 1:2){
downViewport(match[i])
grid.rect(gp=gpar(col = NA, fill = "white"))
grid.raster(image_list[i], interpolate=FALSE)
upViewport(0)
}
Когда я запускаю этот последний цикл я получаю следующую ошибку
Error in UseMethod("as.raster") :
no applicable method for 'as.raster' applied to an object of class "list"
Я заметил, что ввод изображений в список изменяется тип из двойного в список, так что я Думаю, это связано с этим.
typeof(img)
[1] "double"
typeof(image_list[1])
[1] "list"