我如何定义一个加热的身体"或者"黑体辐射"用于R?
中的颜色编码顺序数据的颜色方案标准R调色板不会显示顺序,间隔或比例缩放。由于Borland & Taylor ("Rainbow Color Map (Still) Considered Harmful", IEEE Computer Graphics and Applications, 2007)描述的多种原因,rainbow
调色板存在问题。他们建议使用"黑体辐射"调色板,在其他地方称为加热体"调色板:
不幸的是,我似乎没有找到一个R函数来创建这个调色板。 ColorBrewer和RColorBrewer
包没有帮助(虽然this palette接近),特别是如果我需要超过9种颜色。
CrossValidated中的这个问题与Most effective use of colour in heat/contour maps
有关答案 0 :(得分:1)
grDevices::colorRamp()
这是一个功能:
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数据的季节图中的年份:
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)