Image R:将alpha值添加到png图像

Image R:将alpha值添加到png图像,image,r,Image,R,有没有办法使rasterGrob对象部分透明,以便向其添加alpha因子?我通过annotation\u custom插入png图像(如光栅),在ggplot2绘图中使用徽标作为水印。但是,与使用annotate不同,alpha选项在这里不起作用,因此我猜必须提前更改图像 作为一个简单的例子,根据巴普蒂斯特在他的博客中的建议,到目前为止,我是这样做的: img.path <- readPNG("logo.png") pngob <- rasterGrob(img.path) qplo

有没有办法使rasterGrob对象部分透明,以便向其添加alpha因子?我通过
annotation\u custom
插入png图像(如光栅),在
ggplot2
绘图中使用徽标作为水印。但是,与使用
annotate
不同,
alpha
选项在这里不起作用,因此我猜必须提前更改图像

作为一个简单的例子,根据巴普蒂斯特在他的博客中的建议,到目前为止,我是这样做的:

img.path <- readPNG("logo.png")
pngob <- rasterGrob(img.path)
qplot(1:10, rnorm(10), geom = "blank") +
    annotation_custom(pngob, xmin=6.8, xmax=Inf, ymin=1, ymax=Inf) +
    geom_point()
这将返回m[,1]中的错误
错误:直接从@baptiste返回的维数错误。您可以在创建
w
时调整alpha

 library(png)
 library(gridExtra)
 m <- readPNG(system.file("img", "Rlogo.png", package="png"), FALSE)
 w <- matrix(rgb(m[,,1],m[,,2],m[,,3], m[,,4] * 0.2), nrow=dim(m)[1]) #0.2 is alpha


 qplot(1:10, rnorm(10), geom = "blank") +
      annotation_custom(xmin=-Inf, ymin=-Inf, xmax=Inf, ymax=Inf, 
         rpatternGrob(motif=w, motif.width = unit(1, "cm"))) +
      geom_point()

我必须承认,我并不真正理解创建
w
的过程。我在我的问题上加了一个例子。简单地将
m
替换为
pngob
对我来说不起作用,因为我得到了以下错误:
UseMethod中的错误(“validGrob”):不适用于将“validGrob”方法应用到类“c('matrix','character')的对象上。附加警告:在editThisGrob(grob,spects)中:找不到插槽“vp”。
(我翻译了错误文本,因此在R的英文版本中可能不完全相同)@AnjaM您是否尝试过遵循我发布的示例?在您的编辑中,您无法调整alpha值(创建
w
非常关键)。@RomanLuštrik:当我尝试通过将
m
(来自您的示例)替换为
pngob
(包含我的徽标)来创建
w
,然后我得到错误:
pngob[,1]中的错误:错误的维度数
。在控制台中键入
dim(pngob)
返回
NULL
@AnjaM您需要修改导入的png图像。仔细看我贴的例子,你会注意到其中的区别。在“我的”示例中,我在ggplot2调用中使用
rpatternGrob
转换对象。这本可以早一点完成,但不是在创建
w
@AnjaM之前。您只需将
rpatternGrob
替换为
rasterGrob
。请参阅我的编辑。4个步骤,顺序如下:1)将图像读入数组“a”;2) 设置此阵列的alpha通道(第4个切片);3) 使用此数组创建一个
rasterGrob
;4) 将grob传递给
注释\u custom
@baptiste非常感谢,它是这样工作的!如果你把你的评论作为回答,我会把它标记为接受;你应该接受它。
 library(png)
 library(gridExtra)
 m <- readPNG(system.file("img", "Rlogo.png", package="png"), FALSE)
 w <- matrix(rgb(m[,,1],m[,,2],m[,,3], m[,,4] * 0.2), nrow=dim(m)[1]) #0.2 is alpha


 qplot(1:10, rnorm(10), geom = "blank") +
      annotation_custom(xmin=-Inf, ymin=-Inf, xmax=Inf, ymax=Inf, 
         rpatternGrob(motif=w, motif.width = unit(1, "cm"))) +
      geom_point()
qplot(1:10, rnorm(10), geom = "blank") +
  annotation_custom(xmin=-Inf, ymin=-Inf, xmax=Inf, ymax=Inf, 
    rasterGrob(w)) +
  geom_point()