用R语言制作渐变背景图片

R语言作图设置整张图片的单一背景色很容易,但是要在作图函数中直接产生复杂背景色就相当困难。使用jpeg,tiff,png等软件包直接对图像文件进行操作可以避开R作图函数对图形区设置的限制,轻松获得渐变色等背景。下面以JPG文件为例。

 

library(jpeg)
## 先用barplot函数产生一张JPG图片,默认背景为白色
img <- "result.jpg"
jpeg(img, width = 300, height = 300)
barplot(sample(1:100, 10))
dev.off()
## 读取图片
x <- readJPEG(img)
dimx <- dim(x)
n <- dimx[1] * dimx[2]
r <- x[1:n]
g <- x[(n + 1):(2 * n)]
b <- x[(2 * n + 1):(3 * n)]
## 原背景色,这里取白色
bg <- as.vector(col2rgb("white")/255)
tv <- 0.1
sel <- abs(r - bg[1]) < tv & abs(g - bg[2]) < tv & abs(b - bg[3]) < tv
## 替换背景
bg <- matrix(cm.colors(n), ncol = dimx[1])
bgx <- t(sapply(bg, col2rgb, USE.NAMES = F))/255
r[sel] <- bgx[sel, 1]
g[sel] <- bgx[sel, 2]
b[sel] <- bgx[sel, 3]
x <- array(c(r, g, b), dim = dimx)
writeJPEG(x, "result1.jpg")
## 旋转背景颜色矩阵,改变颜色方向
bg <- t(bg)
bgx <- t(sapply(bg, col2rgb, USE.NAMES = F))/255
r[sel] <- bgx[sel, 1]
g[sel] <- bgx[sel, 2]
b[sel] <- bgx[sel, 3]
x <- array(c(r, g, b), dim = dimx)
writeJPEG(x, "result2.jpg")
## 对角线渐变
ndx1 <- expand.grid(1:dimx[1], 1:dimx[2])
ndx1 <- ndx1[, 1] + ndx1[, 2]
ndx2 <- sort(unique(ndx1))
ndx <- ndx1
for (i in 1:length(ndx2)) ndx[ndx1 == ndx2[i]] <- i
bg <- cm.colors(length(ndx2))
bg <- bg[ndx]
bgx <- t(sapply(bg, col2rgb, USE.NAMES = F))/255
r[sel] <- bgx[sel, 1]
g[sel] <- bgx[sel, 2]
b[sel] <- bgx[sel, 3]
x <- array(c(r, g, b), dim = dimx)
writeJPEG(x, "result3.jpg")

 

下面是R语言做出的原图及背景变换后的效果图:

用R语言制作渐变背景图片_第1张图片 

用R语言制作渐变背景图片_第2张图片 

用R语言制作渐变背景图片_第3张图片 

用R语言制作渐变背景图片_第4张图片

需要其他背景颜色只需稍微修改代码即可。

上面代码的解决方案是编辑颜色矩阵获取背景颜色,当然也可以直接使用现成的图片作为背景,或者使用R作图函数先产生背景图像文件再叠加。


Author: ZGUANG@LZU

Created: 2013-10-12 六 20:09

Emacs 24.3.4 (Org mode 8.0.5)

Validate XHTML 1.0

你可能感兴趣的:(R语言基础)