ggplot2学习笔记之颜色标度


除了位置标度之外,最常用的图形属性就是颜色了。对于连续型变量有三种基于渐变的方法,对于离散型有两种方法。rgb 编码的色彩空间使用了红、绿、蓝三种光的强度来表示一种颜色,这种色彩空间存在个问题:视觉感知上不均匀。这里使用的是hcl 色彩空间的现代方案,它分别由色相(hue)、彩度(chroma)、明度(luminance)三部分构成。

以下标度对边界色(colour)图形属性和填充色(fill)图形属性均有效。

连续型:

根据颜色梯度色彩数量划分,共有三类连续型颜色梯度(即渐变色):

  • scale_colour_gradient()和scale_fill_gradient():双色梯度。顺序由低到高,参数low 和high 用于控制此梯度两端颜色;

  • scale_colour_gradient2()和scale_fill_gradient2():三色梯度。顺序为低-中-高,参数low和high 用于控制此梯度两端颜色,中点默认值是0,可以用参数midpoint 将其设置为任意值;

  • scale_colour_gradientn()和scale_fill_gradientn():自定义的n 色梯度。此标度需要赋给参数colours 一个颜色向量。不加其他参数的话,这些颜色将依照数据的范围均匀地分布。如果你需要让这些值不均匀地分布,则可以使用参数values。如果参数rescale 的值是TRUE(默认),则values 应在0 和1 之间取值,如果rescale 取值FALSE,则values 应在数据范围内取值。

颜色梯度常被用来展示一个二维表面的高度,用以描述第三维度,颜色的深浅代表着不同的值,例如描述地势高低时,地势的高低常常用颜色深浅来展现。以下将使用R自带的一个向量数据集volcano,经过以下转换成数据框(ggplot2 只接受数据框类型):

library(reshape2)
volcano3d <- melt(volcano)
names(volcano3d) <- c("x", "y", "z")
p <- ggplot(data,aes(x,y,fill=z)) + geom_tile() p
p + scale_fill_gradient(limits=c(120,170))
p + scale_fill_gradient(low = 'blue', high = 'red')


        第一个使用默认参数;第二图使用了参数 limits=c(120,170),用于控制填充颜色的值范围,所以小于 120 与大于 170 的值都没有颜色(即都是灰色);最后一个图中使用了参数 low 与 high,控制颜色在 low 与 high 之间渐变。

p + scale_fill_gradient2(low = 'blue', high = 'red')
p + scale_fill_gradient2(low = 'blue', high = 'red', midpoint = 150)

        以上两图都设定了颜色由 blue 到 red 渐变,但是左图使用默认参数 midpoint=0,右图使用参数midpoint=150,而 z 值的范围是 94\~195,所有他们在图中实际渐变色为,左图:浅红-红,右图:蓝-白-红 。

p + scale_fill_gradientn(colours = c('black','blue','red','white'))
p + scale_fill_gradientn(colours = topo.colors(10))
p + scale_fill_gradientn(colours = terrain.colors(10))
p + scale_fill_gradientn(colours = heat.colors(10))

离散型:

离散型数据有两种颜色标度。一种可以自动选择颜色,另一种可以轻松地手工从颜色集中选择颜色。
默认的配色方案,即scale_colour_hue()、cale_fill_hue(),可通过沿着hcl 色轮选取均匀分布的色相来生成颜色。这种方案对颜色较少时有比较好的效果,但对于更多不同的颜色就不好区分开来。里面的各个参数就不多说了,具体查看帮助。

另一种可选的方案是ColorBrewer配色。使用的是scale_colour_brewer()、scale_fill_brewer ()。要想了解所有的调色板,可以使用RColorBrewer::display.brewer.all()查看。以下是调色板:

使用时,用参数palette=”调色板名称或者数字”。例如,使用第二个调色板时用palette = 2(等价于palette = 'YIOrBr')。以下以画箱线图为例。

dsamp <- diamonds[sample(nrow(diamonds), 1000), ]
(d <- ggplot(dsamp, aes(cut, price, fill = cut)) + geom_boxplot())
d + scale_fill_brewer()
d + scale_fill_brewer(palette = 2)
d + scale_fill_brewer(palette = "Spectral")

             左上图使用默认配色方案 cale_fill_hue();后三种都是使用第二种配色方案,分别使用的调色板是:默认调色板、YIOrBr 调色板、Spectral 调色板。




评论

支持上传图片(拖动图片或者截图粘贴)

0 评论