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

来源:互联网 发布:windows查看本机端口 编辑:程序博客网 时间:2024/06/05 22:35

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.1sel <- 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))/255r[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))/255r[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 <- ndx1for (i in 1:length(ndx2)) ndx[ndx1 == ndx2[i]] <- ibg <- cm.colors(length(ndx2))bg <- bg[ndx]bgx <- t(sapply(bg, col2rgb, USE.NAMES = F))/255r[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语言制作渐变背景图片 - xxx - xxx的博客用R语言制作渐变背景图片 - xxx - xxx的博客

 

用R语言制作渐变背景图片 - xxx - xxx的博客用R语言制作渐变背景图片 - xxx - xxx的博客

 

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

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


Author: ZGUANG@LZU

Created: 2013-10-12 六 20:09

Emacs 24.3.4 (Org mode 8.0.5)

Validate XHTML 1.0

0 0