【问题标题】:Heated body or black-body radiation color palette in RR中的加热体或黑体辐射调色板
【发布时间】:2017-09-07 08:28:27
【问题描述】:

如何为 R 中的颜色编码顺序数据定义“加热体”或“黑体辐射”配色方案?

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

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

CrossValidated 的这个问题是相关的:Most effective use of colour in heat/contour maps

【问题讨论】:

  • @agenis:我在网上找不到答案,但我认为这对其他人来说可能很有趣,所以我以we are explicitly encouraged to do 进行了问答。 (另外,我发现 我自己 以后通过这种方式找到相关信息更容易,而不是把它们写在某个地方并需要搜索它们。)

标签: r colors color-scheme


【解决方案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 数据的季节图中使用彩虹与黑体辐射调色板来表示年份:

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-14
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 2019-11-27
    相关资源
    最近更新 更多