R:创建png栅格列表,读入grid.raster

时间:2016-03-24 16:15:49

标签: r raster

这篇文章与我几天前问过的question有关,特别是这个post(我借用了下面的代码)。我认为这是一个新问题,因为这是一个新问题。

我正在尝试使用geom_point的自定义图像在ggplot2中绘图,然后将这些图像粘贴到图例中。但是,当我将图像栅格放入列表,并在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" 

我注意到将图像放入列表会将类型从double更改为list,所以我猜测这与它有关。

typeof(img)
[1] "double"
typeof(image_list[1])
[1] "list"

1 个答案:

答案 0 :(得分:1)

由于您在执行image_list时对image_list[i]进行子集化的方式,您会收到该错误,您需要通过添加额外的[]对来更深入一级,即{ {1}}获取数组(图像)

image_list[[i]]