ggplot2:绘制具有一组相似颜色的离散因子

时间:2012-07-24 06:02:59

标签: r plot ggplot2

我正在尝试用一种一致的方式来表示我的数据集中的每个因素。因此,例如,每当我绘制涉及词性的内容时,我可以将“词性”的级别用不同的蓝色阴影表示:

eg.dat <- data.frame(rt=c(530, 540, 555), 
                     part.of.speech=c("Verb", "Noun", "Both")
                     )

ggplot(eg.dat, aes(part.of.speech, rt, fill=part.of.speech)) +
  geom_bar(stat="identity", colour="black") +
  scale_fill_manual(values=c("cyan", "blue", "darkblue")) 

Specifying colours manually

然而,为每个因素提供这样的花哨的颜色名称是困难的,所以我一直在寻找更多的自动解决方案。一个相当糟糕的解决方法是使用alpha

ggplot(eg.dat, aes(part.of.speech, rt, alpha=part.of.speech)) +
  geom_bar(stat="identity", colour="black", fill="blue") +
  scale_alpha_discrete(range=c(0.4, 1))

Using alpha

但我一直在想是否有更简单的方法可以选择这样的短程类似颜色。 scale_colour_gradient中的ggplot2类型函数不适用于这些离散因素,从rainbowheat.colors中获取自定义颜色似乎并不容易。理想的功能是这样的: shades(n, central_colour="blue"),返回n个颜色值。有关实现这一目标的最佳方法的任何建议吗?

1 个答案:

答案 0 :(得分:9)

scale_fill_discretescale_fill_hue会执行此操作。您可以定义hcl(色调,色度和亮度)。有关详细信息,请参阅?hcl

例如

ggplot(eg.dat, aes(part.of.speech, rt, fill=part.of.speech)) +
     geom_bar(stat="identity", colour="black") +
     scale_fill_discrete( h =c(220,260))

enter image description here

scale_fill_hue会给出相同的结果(在这种情况下)。

您还可以使用使用scale_fill_brewer包的RColorBrewer并访问colorbrewer调色板

ggplot(eg.dat, aes(part.of.speech, rt, fill=part.of.speech)) +
     geom_bar(stat="identity", colour="black") +
     scale_fill_brewer(palette = 'Blues')

enter image description here