我无法自拔:用过这张照片 http://en.wikipedia.org/wiki/File:Tie-dye.png并进行了改编这个例子来自保罗·默雷尔 http://developer.r-project.org/Raster/filledbars.R。想做这类事情的人可能会发现此链接来自 R wiki http://rwiki.sciviews.org/doku.php?id=tips:graphics-misc:translucency也很有用,尽管它有点旧并且没有利用新的光栅功能。这个帖子 http://www.r-bloggers.com/rounded-corners-in-ggplot2-graphics/是一个放置的例子ggplot
各种圆角框架中的图形。
edit:巴蒂斯特提供了很多帮助。
library(png)
library(grid)
imgfile <- "http://upload.wikimedia.org/wikipedia/commons/e/e1/Tie-dye.png"
download.file(imgfile,dest="tiedye.png")
r <- readPNG("tiedye.png")
rmat <- matrix(rgb(r[,,1],r[,,2],r[,,3],alpha=0.4),
nrow=dim(r)[1])
阴影点的函数:
shadow.points <- function(x, y, size=unit(1, "char"), default.units="native", ...) {
if(!is.unit(x)) {x <- unit(x, default.units) }
if(!is.unit(y)) { y <- unit(y, default.units) }
grid::grid.points(x+0.2*size, y-0.2*size, size=size, gp=gpar(col="black"), pch=20)
grid::grid.points(x, y, size=size, default.units=default.units, ...)
}
根据设置掩码grid.roundrect
:
png("mask.png",width=ncol(r), height=nrow(r), res=1)
grid.roundrect(gp=gpar(fill="black"))
dev.off()
m <- readPNG("mask.png", native=FALSE)
mask <- matrix(rgb(m[,,1],m[,,2],m[,,3]),
nrow=dim(m)[1])
rmat[mask == "#FFFFFF"] <- "#FFFFFF"
(请注意,我认为跨平台对每像素透明度变化的支持存在一些差异(例如,这可能不适用于 Windows??)) warning:其他平台上也可能存在瑕疵 - 背景没有显示在 PNG 上,我必须导出为 PDF ...
grid.newpage()
pushViewport(plotViewport(),
viewport(xscale=c(0, 10), yscale=c(0, 10)))
grid.raster(rmat,x=unit(0,"native"),y=unit(0,"native"),
width=1,height=1,just=c(0,0))
grid.roundrect() ## frame
grid.xaxis(at=seq(2,8,by=2)) ## axes -- shorter to avoid going beyond end of frame
grid.yaxis(at=seq(2,8,by=2))
shadow.points(x=rnorm(10,mean=5),y=rnorm(10,mean=5),pch=20,
gp=gpar(col="cyan"))