【问题标题】:Randomising qualitative colours for large sets in ggplotggplot中大集合的随机定性颜色
【发布时间】:2014-02-16 15:04:51
【问题描述】:

如果您要为大量组定性地映射到颜色,ggplot 的自动颜色分配会相邻绘制非常相似的颜色,因此很难看出哪个指的是哪个键等。举例说明:

require(ggplot2); require(stringr)
df = data.frame(x = letters, y = sample(20:100,26), lab=word("apple ball cat dog elephant frog goat hat ice jackal king lion mango nest owl parrot queen rabbit ship tomato umbrella van watch xylophone yatch zebra", 1:26))
p = ggplot(df, aes(x, y, fill=lab)) + geom_bar(stat="identity")
p + scale_fill_discrete()

可以手动混合一些随机颜色:

cols = rainbow(26, s=.6, v=.9)[sample(1:26,26)]
p + scale_fill_manual(values=cols)

.. 导致更有用的彩虹分解,但这看起来很笨拙,仍然会留下一些颜色聚集在一起,通常并不理想。 ggplot 是否有本地方法来实现这样的目标(但希望更好)?

【问题讨论】:

  • 我的建议,不要。一个情节中的信息太多了,并且颜色没有显着差异,不足以为观众有效地翻译这些信息。尽力将结果分开或分组为有意义的或其他功能性的休息 - 你的读者会感谢你。尽管有 10% 的人还是色盲。
  • 直接从这里的经验发言:stackoverflow.com/questions/13616515/…
  • 布兰登,我很欣赏你提出的感知问题,通常我会同意。我的问题是我正在处理 30 多个类别的不可分组数据,它们的标题很长(对于 x 轴来说太大),我想避免 90 度旋转。
  • @Brandon Bertelsen - 我同意你的观点。然而,有时读者只是——我! - 我想找出趋势或进行初步的数据探索 - 在将数据进一步分组之前非常简单。我发现这个问题很有帮助。

标签: r ggplot2


【解决方案1】:

为这么多颜色制作一个好的调色板确实是一项艰巨的任务。但是,有一种解决方案可能会有所帮助。前段时间我 fork this repo 并找到了对 iWantHue 的引用。据我所见,生成的调色板已经混合,因此相邻的颜色看起来可以区分。

例如,对于您的示例,我有

以防万一,调色板是

"#89C5DA", "#DA5724", "#74D944", "#CE50CA", "#3F4921", "#C0717C", "#CBD588", "#5F7FC7", 
"#673770", "#D3D93E", "#38333E", "#508578", "#D7C1B1", "#689030", "#AD6F3B", "#CD9BCD", 
"#D14285", "#6DDE88", "#652926", "#7FDCC0", "#C84248", "#8569D5", "#5E738F", "#D1A33D", 
"#8A7C64", "#599861"

【讨论】:

  • 感谢 tonyronov 这很有用,尽管我认为本质上这种饱和度和价值的可变性可以通过我的代码的 tweek 来实现:col.par = function(n) sample(seq(0.3, 1, length.out=50),n); cols = rainbow(26, s=col.par(26), v=col.par(26))[sample(1:26,26)]
  • 是的。但是,当您使用sample 时,两个或更多看起来很接近的颜色可能会随机地彼此靠近。我认为建议的调色板已经正确洗牌了。
  • 公平点。您指的关键 R 代码是什么?我可以在ggplot.Rnw 中看到对 iWantHue 的引用,但我无法识别代码格式。
  • 好吧,iWantHue 似乎没有提供任何类型的 API,所以我只是从那里获取了一个 JSON。顺便说一句,更多想法here.
  • 我喜欢这个答案...但是我不欣赏我预见到在这个网站上浪费的时间!! ;)
猜你喜欢
  • 1970-01-01
  • 2018-11-29
  • 2014-11-17
  • 2011-02-26
  • 2016-09-23
  • 1970-01-01
  • 1970-01-01
  • 2018-03-18
  • 2013-02-03
相关资源
最近更新 更多