除了位置标度之外,最常用的图形属性就是颜色了。对于连续型变量有三种基于渐变的方法,对于离散型有两种方法。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 调色板。
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
(select 198766*667891 from DUAL)
(select 198766*667891)
@@mgMwc
555����%2527%2522\'\"
555'"
555
555'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'
555*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15)
555JJhlptpW')) OR 620=(SELECT 620 FROM PG_SLEEP(15))--
555J8CkmSVc') OR 622=(SELECT 622 FROM PG_SLEEP(15))--
555m8QpInM8' OR 470=(SELECT 470 FROM PG_SLEEP(15))--
555-1)) OR 986=(SELECT 986 FROM PG_SLEEP(15))--
555-1) OR 656=(SELECT 656 FROM PG_SLEEP(15))--
555-1 OR 284=(SELECT 284 FROM PG_SLEEP(15))--
555HrSr8EDa'
555-1 waitfor delay '0:0:15' --
555-1)
555-1
(select(0)from(select(sleep(15)))v)/*'+(select(0)from(select(sleep(15)))v)+'"+(select(0)from(select(sleep(15)))v)+"*/
5550"XOR(555*if(now()=sysdate(),sleep(15),0))XOR"Z
5550'XOR(555*if(now()=sysdate(),sleep(15),0))XOR'Z
555*if(now()=sysdate(),sleep(15),0)
-1" OR 5*5=25 or "qg0cxKQA"="
-1' OR 5*5=25 or 'b8to2eF9'='
-1" OR 5*5=25 --
-1' OR 5*5=25 --
-1 OR 5*5=25
-1 OR 5*5=25 --
555
555
555