提问人:Marius 提问时间:7/24/2012 更新时间:7/24/2012 访问量:8555
ggplot2:使用一组相似颜色绘制离散因子
ggplot2: Plot discrete factors with a set of similar colours
问:
在绘制数据集时,我试图想出一种一致的方式来表示数据集中的每个因素。因此,例如,每次绘制涉及词性的内容时,我都可以用不同深浅的蓝色表示“词性”的级别:
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"))
然而,为每个因素想出这样花哨的颜色名称是很困难的,所以我一直在寻找更自动化的解决方案。一个相当黑客的解决方法是使用: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))
但我一直在想,有没有更简单的方法来选择像这样短范围的相似颜色。中的类型函数不能处理这样的离散因子,并且从 或 中获取自定义颜色似乎不是特别容易。理想的函数是这样的:,返回颜色值。对实现这一目标的最佳方法有什么建议吗?scale_colour_gradient
ggplot2
rainbow
heat.colors
shades(n, central_colour="blue")
n
答:
10赞
mnel
7/24/2012
#1
scale_fill_discrete
或者会这样做。您可以定义 和 (色调、色度和亮度)。有关详细信息,请参阅scale_fill_hue
h
c
l
?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))
scale_fill_hue
将给出相同的结果(在本例中)。
您还可以使用该包并访问 colorbrewer 调色板scale_fill_brewer
RColorBrewer
ggplot(eg.dat, aes(part.of.speech, rt, fill=part.of.speech)) +
geom_bar(stat="identity", colour="black") +
scale_fill_brewer(palette = 'Blues')
评论
0赞
Marius
7/24/2012
我们在这里可能走得太远了,但对我来说,你得到的色调似乎不如——要么它们太相似,要么它们变得不那么明显,它们是相同颜色的色调。其中一个副作用可能是色度和亮度正在发生变化,可惜你不能做同样的事情。scale_fill_hue
scale_fill_alpha
alpha
scale_fill_hue
0赞
mnel
7/24/2012
您必须使用 h、c 和 l 才能获得“良好”范围。这种方法更简单,因为调色板是预定义的,并且是科学研究的结果,以获得最佳颜色。brewer
2赞
bdemarest
7/24/2012
@Marius,Color Brewer 调色板经过优化,可连续且分离良好。您可以通过更改调色板编号轻松尝试所有 19 种可能性:sequential
scale_fill_brewer(type="seq", palette=1)
评论
?scale_fill_brewer
使用实现网站 http://colorbrewer2.org/ 上显示的想法的包。R
RColorBrewer
?scale_fill_hue