【问题标题】:inverted diverging colour palette反向发散调色板
【发布时间】:2014-07-13 03:12:18
【问题描述】:

我经常使用一个发散的调色板映射到一个参数,该参数在靠近中间的某个地方有一个有趣的转折点。

不幸的是,可用的不同调色板 - 例如。来自 C. Brewer 的那些——似乎都在两个极端而不是在中间有饱和颜色,通常被定义为白色或浅灰色。这是一个说明的例子

文本标签指示的连续参数通过相关曲线的峰值达到最大值的最佳值。

在浅白色或灰色背景上(典型的 ggplot2),我的数据中最有趣的部分变得几乎不可见;我希望它“弹出”更多,而两边的值逐渐远离中心,具有不同的色调。 有没有好的发散调色板的来源,中间饱和度更高,两边褪色?

这是一个示例代码,用于说明,选择黑色作为中性中间点(我更喜欢不那么戏剧化的东西,但很难让它与两边很好地融合)。

require(RColorBrewer)
grid.newpage()
grid.raster(brewer.pal(7,"PRGn"), 0.25, 0.5, 0.4, 1)

custom <- c(brewer.pal(3,"BuPu"), "black", rev(brewer.pal(3,"BuGn")))
grid.raster(custom, 0.75, 0.5, 0.4, 1)

编辑:澄清一下,我对colorRampPalettescale_colour_gradientn很熟悉,请在

1- 为此目的选择好的颜色;

2- 定义将手工制作的调色板映射到变量的色阶,类似于scale_colour_gradient2mid 参数所做的操作(中心颜色可能不在参数范围的确切中心)

【问题讨论】:

  • colorRampPalette 不给你这个吗?例如par(bg = 'grey97', xpd = NA);plot(1:1000, pch = 19, cex = 5, col = colorRampPalette(c('lightgreen','black','mediumpurple1'))(1000)) 如果您想要更浅的色调,只需重复颜色:plot(1:1000, pch = 19, cex = 5, col = colorRampPalette(c('lightgreen','lightgreen','black','mediumpurple1','mediumpurple1'))(1000))
  • @rawr 我已经用附录编辑了问题以澄清问题

标签: r ggplot2 color-palette colorbrewer


【解决方案1】:

您可能会喜欢玩 choose_palette(),这是一个相对较新的优秀 colorspace 包。

该软件包中的函数可让您对色彩空间的色调、色度和亮度特性进行完全且很大程度上正交的控制。 choose_palette() 为您提供了一种方便的方式来探索开放的巨大空间。

下面是启动调色板选择器的代码,后面是 GUI 工具的屏幕截图。 (请注意,要使范围的中间比末端更暗,您需要交换发散调色板的默认亮度值,这里表示为“L1”和“L2”。)

library(colorspace)
library(grid)

custom <- choose_palette()

这是一个例子,它让我在玩它大约一分钟内得到了两个

custom <- diverge_hcl(20, h=c(-225,277), c=80, l=c(80,25))
grid.newpage()
grid.raster(custom, 0.25, 0.5, 0.4, 1)

包及其背后的思想都很好地记录在包小插图 (vignette("hcl-colors")) 和发表在计算统计和数据分析杂志上的配套文章 "Escaping RGBland: Selecting colors for statistical graphics" (Warning: pdf) 中。

【讨论】:

  • 谢谢,这是一个漂亮的工具。 (我希望 Rstudio 不会在每次需要 tck 时都死掉)。
  • @baptiste -- 这 RStudio 有一个不幸的习惯!在重新阅读您的问题时,我现在看到我的回答并没有真正解决最有趣的部分。希望其他人可以为我们指出具有较暗中档的专业品质的发散调色板,例如RColorBrewer 已经给我们的调色板集。
  • this article (Warning: pdf) 中图 6 中的“等亮度颜色图”看起来很有希望,紧随其后的讨论也很有趣。
  • 是的,我今天早些时候在看这个,但如果我没记错的话,所有的例子中间都有去饱和的颜色(灰色)。真的很难找到任何反转发散尺度的通常设计的东西。
  • 这很棘手,我同意。我希望有一些交互式工具可以在颜色空间的特定切片上绘制贝塞尔曲线(固定色度、色调、亮度或其他更好的感知参数),然后定义沿曲线横坐标的映射。
【解决方案2】:

我过去做过的一种方法是反转发散的渐变(这与您所做的很接近,但不完全一样),然后使用 Alpha 通道来淡化渐变的末端。

library(ggplot2)
pal <- brewer.pal(7,"PRGn")
custom <- c(rev(pal[1:3]),rev(pal[5:7]))
alpha  <-  c(seq(3),rev(seq(3)))/3
x <- 1:6
y <- rep(1)
MyDF <- data.frame(custom,alpha,x,y)
MyPlot <- ggplot(data = MyDF, aes(x = x, y = y, fill=custom, alpha=alpha)) + geom_bar(stat = "identity", color="white") + 
          scale_fill_identity() + scale_alpha_continuous(range = c(0.6, 1))
MyPlot

我知道的唯一一篇讨论像这样的翻转色带的文章是 圆形数据图像,高分辨率圆形空间数据的图表 (Morphet & Symanzik, 2010)(没有在线版本,抱歉)。基本上,它们会改变值和饱和度以使斜坡的末端合并在一起——尽管它们在细节上有点吝啬。这是其中一张图表的图片。

他们在现已弃用的软件包 CircSpatial 中有这些坡道,因此您可以从那里剔除他们是如何制作坡道的。

【讨论】:

    猜你喜欢
    • 2018-11-29
    • 2020-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 2023-03-18
    • 2021-09-16
    相关资源
    最近更新 更多