2016-03-24 11 views
1

この投稿はquestionに関連しています。私は数日前に尋ねました。具体的にはpostです(ここからコードを借りました)。これは新しい問題であるため、新しい質問が必要だと感じました。R:pngラスタのリストを作成し、grid.rasterを読み込みます。

私はgeom_pointのカスタムイメージでggplot2をグラフ化し、それらのイメージを凡例に貼り付けようとしています。しかし、イメージラスタをリストに入れ、grid.rasterのリストの要素を参照すると、エラーがスローされます。後でgrid.rasterから呼び出すことができるように、リストにpngラスタを格納する方法はありますか?私は次のエラー

Error in UseMethod("as.raster") : 
no applicable method for 'as.raster' applied to an object of class "list" 

を取得し、この最後のループを実行すると、ここでは一例だ...

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) 
} 

は私がリストに画像を置くことは、二重のリストにタイプを変更することに気づいたので、私これを推測するには、それと関係があります。

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

答えて

1

あなたはので、あなたは、あなたが配列(画像)を取得するには[]すなわち、image_list[[i]]の余分なペアを追加することで、より深い1つのレベルに行くimage_list[i]必要がないとき、あなたがimage_listをサブセット化されている方法でそのエラーを取得している

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") 

#Create the object `img`: your example code above does not do this 
img <- r_studio 

# 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) 
} 
関連する問題