【问题标题】:Superimpose red/green images in R using image() or rasterImage()使用 image() 或 rasterImage() 在 R 中叠加红/绿图像
【发布时间】:2012-12-13 20:18:50
【问题描述】:

为了突出两个相同大小的矩阵之间的差异,我想以半透明的方式显示这两个矩阵,在 R 中,一个矩阵使用红色阴影,另一个矩阵使用绿色阴影(它们相同时产生黄色) .

只显示一个矩阵

library(grDevices)
matr=replicate(10, rnorm(20,mean=0.5,sd=0.1))    
colpalette=colorRampPalette(c("black", "red")) 
image(matr^0.2,col = colpalette(1000),useRaster=T)

有谁知道我应该如何调整它以显示两个矩阵 matr1matr2 以红色/绿色叠加?

另外,对生成的图像的亮度和对比度进行一些控制的最佳方法是什么?有没有比我现在使用的功率变换更好的方法?

干杯, 汤姆

【问题讨论】:

  • rasterImage 将直接采用十六进制值的矩阵或 rgb 值的 3d 数组,使用它 - 图像不会公开该选项。另请参阅 sp 中的 SGDF2PCT 以了解图像的调色板构建方法,请记住透明度支持取决于设备,不确定 rasterImage 是否提供它
  • @mdsumner -- sp:::SGDF2PCT 什么也没找到。你是说其他包吗?
  • @JoshO'Brien rgdal 是我相信的包。
  • @thelatemail -- 原来如此!谢谢你们俩。

标签: image r graphics


【解决方案1】:

Ha 刚刚找到了一个简单的解决方案,首先计算两个矩阵之间的 log2(差值),然后使用中断为零的调色板绘制它。这很有道理,对吧?

library(grDevices)
matr1=replicate(10, rnorm(20,mean=0.5,sd=0.1)) 
matr2=replicate(10, rnorm(20,mean=0.5,sd=0.1))
matrdiff=log2(matr1/matr2)
nbcolors=1000
colpalette=colorRampPalette(c("red","yellow","green"))(nbcolors)
breaks = c(seq(min(matrdiff), 0, length.out=nbcolors/2), 0, 
           seq(0,max(matrdiff), length.out=nbcolors/2))
image(matrdiff,col=colpalette,breaks=breaks,useRaster=T)

【讨论】:

    猜你喜欢
    • 2021-03-20
    • 2020-11-21
    • 2020-07-07
    • 1970-01-01
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    • 2017-08-19
    • 1970-01-01
    相关资源
    最近更新 更多