方法为R图添加类似Excel的功能?

low*_*rul 11 graphics r

我一直在寻找R图形参数,试图让我的情节看起来更专业(例如las=1,bty="n"通常是帮助).开始玩了tikzDevice,这是我脑海中一个巨大的进步.令人惊讶的是,当图中的字体大小和样式与周围文档的字体大小和样式相匹配时,看起来有多好.

我想在我的情节中添加几种效果,并且对以可重现的方式这样做的方法感兴趣.我意识到这些可能被认为是"图表垃圾",但我发现在我的领域中添加它们有助于将输出视为专业.

具体来说,我想产生以下任何或所有效果:

  1. 渐变阴影 渐变着色
  2. 圆角 圆角
  3. 暗影效果

阴影

代码,对适当软件包的引用或实现这些影响的策略大纲将会有所帮助.谢谢.

Spa*_*man 15

您可以通过在生成阴影的线偏移处绘制多条线来制作阴影线.以宽灰色(灰色(1))绘制的宽线(lwd = 30,比如说)开始,然后绘制颜色为灰色的较细线(.5).有一个影子.

package:grid具有圆角矩形的功能.或者您可以使用分段和线条以及一些古希腊几何图形在基础图形中绘制它们.

可以使用"图像"将迷幻背景喷溅到基础图形画布上.使用"raster"包以您喜欢的任何分辨率生成图像.

您还可以使用名为RGoogleVis的软件包与Google的图表连接,或导出为JSON,并使用D3之类的东西来制作企业交互式图形:

http://mbostock.github.com/d3/ex/

或者只是将已完成的数据加载到Excel中.

  • 最后一条评论的+1.Snark加上援助(或援助加上snark)是最好的组合. (4认同)

Ben*_*ker 15

我无法自拔:使用这张照片并改编自Paul Murrell的这个例子.想要做这类事情的人可能会发现R维基中的这个链接也很有用,虽然它有点旧,并没有利用新的(ish)栅格功能.这篇文章是一个将ggplot图形放在各种圆角框架中的示例.

编辑:巴蒂斯特的大量帮助.

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])
Run Code Online (Sandbox Code Playgroud)

阴影点的功能:

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, ...)
} 
Run Code Online (Sandbox Code Playgroud)

根据以下内容设置掩码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"
Run Code Online (Sandbox Code Playgroud)

(注意,我认为对于跨平台透明度的每像素变化的支持有一些变化(例如,这可能不适用于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"))
Run Code Online (Sandbox Code Playgroud)

扎染

  • +1这是自[Zombo.com](http://www.zombo.com)以来我见过的最好的事情.我只需要让R玩:"欢迎来到R. R中任何事都有可能.唯一的限制就是你自己." (3认同)
  • +1我希望他们重新打开r-project.org网站横幅的竞争对手:)如果不这样做,如何将其发布到R图库? (2认同)

bap*_*ste 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()
Run Code Online (Sandbox Code Playgroud)


bap*_*ste 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, ...)
} 
Run Code Online (Sandbox Code Playgroud)