R中的加热体或黑体辐射调色板

时间:2017-09-07 08:28:27

标签: r colors color-scheme

我如何定义一个加热的身体"或者"黑体辐射"用于R?

中的颜色编码顺序数据的颜色方案

标准R调色板不会显示顺序,间隔或比例缩放。由于Borland & Taylor ("Rainbow Color Map (Still) Considered Harmful", IEEE Computer Graphics and Applications, 2007)描述的多种原因,rainbow调色板存在问题。他们建议使用"黑体辐射"调色板,在其他地方称为加热体"调色板:

black-body radiation or heated body color palette

不幸的是,我似乎没有找到一个R函数来创建这个调色板。 ColorBrewerRColorBrewer包没有帮助(虽然this palette接近),特别是如果我需要超过9种颜色。

CrossValidated中的这个问题与Most effective use of colour in heat/contour maps

有关

1 个答案:

答案 0 :(得分:1)

这是一个功能:

blackBodyRadiationColors <- function(x, max_value=1) {
    # x should be between 0 (black) and 1 (white)
    # if large x come out too bright, constrain the bright end of the palette
    #     by setting max_value lower than 1
    foo <- colorRamp(c(rgb(0,0,0),rgb(1,0,0),rgb(1,1,0),rgb(1,1,1)))(x*max_value)/255
    apply(foo,1,function(bar)rgb(bar[1],bar[2],bar[3]))
}

以下是一个示例,我们使用彩虹与黑体辐射调色板来指示AirPassengers数据的季节图中的年份:

AirPassengers seasonplot

library(forecast)

n.colors <- ceiling(length(AirPassengers)/frequency(AirPassengers))
colors.blackBody <- blackBodyRadiationColors(seq(0,0.6,length.out=n.colors))
colors.rainbow <- rainbow(n.colors)

opar <- par(mfrow=c(2,1),mai=c(.5,1.2,.1,.1))
    seasonplot(AirPassengers, col=colors.rainbow,
      pch=19,year.labels=TRUE,xlab="",main="",ylab="Rainbow\npalette")
    seasonplot(AirPassengers, col=colors.blackBody,ylab="Black-body\nradiation palette",
      pch=19,year.labels=TRUE,xlab="",main="",ylab="Black-body\nradiation palette")
par(opar)