我正在R下工作,想做以下事情。
我有一个矩阵,其项的整数范围为1到n。此外,我还有一个命名列表,将整数1,2,3 ...,n映射到颜色
c('white':1, 'black':2, 'pink':3, ...., 'purple':n)
我想要的是以与矩阵相同的分辨率将jpeg写入磁盘,并在每个像素中根据命名列表将颜色与矩阵条目中的整数相对应。
例如,我想要以下矩阵和颜色图对应的5 x 5 jpeg。
col = c('0':'white', '1':'yellow', '2':'black', '3':'green')
A = matrix( round(runif(min = 0, max = 3, n = 25)), nrow = 5)
我已经修改了EBImage软件包和raster软件包,但是到目前为止,我还没有找到实现此目的的方法。
有人有实现这一目标的代码或有什么建议吗?
答案 0 :(得分:1)
如@RobertHijmans所述,c('0':'white', '1':'yellow', '2':'black', '3':'green')
不是有效的R。
使用颜色向量:
colors <- c('white', 'yellow', 'black', 'green')
整数矩阵:
A <- matrix( round(runif(min = 0, max = 3, n = 25)), nrow = 5)
将其转换为相应颜色的矩阵:
Acolors <- apply(A, 1:2, function(i) colors[i+1])
这给出了:
> Acolors
[,1] [,2] [,3] [,4] [,5]
[1,] "green" "yellow" "black" "white" "yellow"
[2,] "yellow" "black" "yellow" "yellow" "white"
[3,] "black" "yellow" "black" "yellow" "yellow"
[4,] "white" "black" "black" "yellow" "black"
[5,] "yellow" "black" "black" "black" "yellow"
现在,应用功能rasterImage
:
par(mar=c(0,0,0,0))
plot(0, 0, type = "n", xlim=c(0,1), ylim=c(0,1), asp=1,
axes=FALSE, xlab=NA, ylab=NA)
rasterImage(Acolors, 0, 0, 1, 1, interpolate = FALSE)