我一直在寻找R图形参数,试图让我的情节看起来更专业(例如,las=1
,bty="n"
通常有帮助)。开始玩tikzDevice
,这是我心中的一个巨大进步。令人惊讶的是,当图中的字体大小和样式与周围文档的字体大小和样式相匹配时,看起来有多好。
我想在我的情节中添加几种效果,并且对以可重现的方式这样做的方法感兴趣。我意识到这些可能被认为是“图表垃圾”,但我发现在我的领域中添加它们有助于将输出视为专业。
具体来说,我想产生以下任何或所有效果:
代码,对适当软件包的引用或实现这些影响的策略大纲将会有所帮助。谢谢。
答案 0 :(得分:15)
我无法自拔:使用this picture并改编this example from Paul Murrell。想要做这类事情的人可能会发现this link from the R wiki也很有用,虽然它有点旧,并没有利用新的(ish)栅格功能。 This post是将ggplot
图形放入各种圆角框架中的示例。
编辑:Baptiste的大量帮助。
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?))警告:其他平台上也可能存在工件 - 背景没有显示在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"))
答案 1 :(得分:5)
在@Ben Bolker的例子中使用圆角矩形作为剪辑蒙版,
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"
grid.raster(rmat)
grid.roundrect()
答案 2 :(得分:5)
为Ben Bolker的例子添加一个阴影,
grid.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, ...)
}