R ggplot中大集合的随机定性颜色

R ggplot中大集合的随机定性颜色,r,ggplot2,R,Ggplot2,如果要定性地映射大量组的颜色,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

如果要定性地映射大量组的颜色,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是否有一种本地方法来实现类似的效果(但希望更好)?

为这么多颜色制作一个好的调色板确实是一项艰巨的任务。然而,有一种解决方案可能会有所帮助。不久前,我提出了回购协议,并找到了一个参考。据我所见,最终的调色板已经混合,因此相邻的颜色看起来可以区分

例如,我举了你的例子

以防万一,调色板是

"#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"

我的建议是,不要。在一个情节中有太多的信息,并且颜色没有明显的不同,不足以有效地为观众翻译这些信息。尽你最大的努力将结果分成有意义的或功能性的部分——你的读者会感谢你的。尽管有10%的人是色盲。直接从这里的经验来说:布兰登,我很欣赏你提出的感知问题,通常我会同意。我的问题是,我正在处理30多个类别的不可分组数据,标题很长(对于x轴来说太大),我希望避免90度旋转。@Brandon Bertelsen-我同意你的观点。然而,有时读者只是-我我想挑出趋势或者做初步的数据探索——在将数据进一步分组之前做一些非常简单的事情。我发现这个问题很有帮助。感谢托尼罗诺夫,这是有用的,虽然我认为在本质上这个饱和度和价值的变化是可以用一个星期的代码来实现的:<代码> Cal.Par=函数(n)样本(SEQ(0.3,1,长度,out=50),n);cols=rainbow(26,s=col.par(26),v=col.par(26))[样本(1:26,26)]。它是。但是,当您使用样本时,两种或两种以上的近景颜色可能会随机地彼此接近。我认为提议的调色板已经被适当地洗牌了。说得好。你所指的R码是什么?我可以在中看到对iWantHue的引用,但我不识别代码格式。看来iWantHue没有提供任何类型的API,所以我只是从中获取了一个JSON。顺便说一句,更多的想法。我喜欢这个答案。。。然而,我不欣赏我预计在这个网站上浪费的时间!!;)