Bu gönderi bir kaç gün önce bir question sorusuyla ilgilidir ve özellikle bu post'a (bundan aşağıdaki kodu ödünç aldım) sordum. Yeni bir soru gerektirdiğini düşündüm çünkü bu yeni bir konu.R: png rasterlerinin oluşturulması, grid.raster öğesinin okunması
ggplot2'de geom_point için özel resimlerle grafik çizmeye çalışıyorum, sonra bu görüntüleri efsaneye yapıştırın. Ancak, görüntü rasterlerini bir listeye koyduğumda ve grid.raster'daki bu listenin referans öğeleri bir hata atar. Png rasterlerini bir listede saklamak için bir yol var mı? Böylece daha sonra grid.raster'den çağrılabilirler? İşte bir örnek ...
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)
}
Ben bir liste halinde görüntüleri koyarak listeye çift gelen türünü değiştirir fark
Error in UseMethod("as.raster") :
no applicable method for 'as.raster' applied to an object of class "list"
aşağıdaki hatayı olsun bu son döngü çalıştırmak, bu yüzden ne zaman Bunun bununla bir ilgisi olduğunu tahmin ediyorum. Eğer image_list[i]
yaptığınızda çünkü image_list
subsetting biçimi nedeniyle bu hatayı alıyorsanız
typeof(img)
[1] "double"
typeof(image_list[1])
[1] "list"