R:ggplot2(14),第6章 标度、坐标轴和图例(2)

《ggplot2:数据分析与图形艺术》

第6章 标度、坐标轴和图例

6.4 标度详解

6.4.3 颜色标度

映射颜色的方法很多,对于连续型值有三种基于渐变的方法,对于离散型值有两种方法。
hcl色彩空间由三部分构成,分别是色相(hue)、彩度(chroma)、明度(luminance)。

  • 色相(hue)是一个0和360之间的(角度)值,它将一种色彩赋以“颜色”属性:如蓝、红、橙等等。
  • 明度(luminance)指颜色的明暗程度。明度的高低,要看其接近白色或黑色的程度而定。明度为0为黑,明度为1为白。
  • 彩度(chroma)指色彩的纯度。彩度为0是灰色,彩度的最大值随明度的变化而不同。

所以绘图标准当中,最好避免使用红——绿比对,并且要使用可以模拟色盲情形的系统来检查你的图形。Visicheck就是一种在线解决方案。另外一种选择是使用dichromat包。

连续型

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

  • 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应在数据范围内取值。

例子:
> library(ggplot2)
> f2d <- with(faithful, MASS::kde2d(eruptions, waiting, h=c(1, 10), n = 50))
> df <- with(f2d, cbind(expand.grid(x,y), as.vector(z)))
> names(df) <- c("eruptions", "waiting", "density")
> erupt <- ggplot(df, aes(waiting, eruptions, fill=density)) + geom_tile() + scale_x_continuous(expand=c(0, 0)) + scale_y_continuous(expand=c(0, 0))#expand作用是颜色图形铺满整个屏幕
> erupt + scale_fill_gradient(limits=c(0, 0.04))#双色梯度从0到0.04进行颜色梯度的渐变
默认的颜色梯度:

> erupt + scale_fill_gradient(limits=c(0, 0.04), low="white", high="black")#双色梯度,从0到0.04进行颜色梯度的渐变,但这里low为白色,high为黑色,所以颜色是从数据密度低低的白色渐变到数据密度高的黑色。
黑白二色梯度:
R:ggplot2(14),第6章 标度、坐标轴和图例(2)_第1张图片
> erupt + scale_fill_gradient2(limits=c(-0.04, 0.04), midpoint = mean(df$density))#这里是选用了数据当中的数值,并且利用midpoint参数设定为任意值,并将颜色区间设定为两个颜色区间,由偏向于-0.04这个值的铁红色的区间,渐变到0.04这个值的蓝色区间,中间0,表示为近白色。
erupt <- ggplot(df, aes(waiting, eruptions, fill=density)) + geom_tile() + scale_x_continuous(expand=c(0, 0)) + scale_y_continuous(expand=c(0, 0))
绘图选用是数据集是df,颜色填充所用的是fill=density的值,所以
erupt + scale_fill_gradient2(limits=c(-0.04, 0.04), midpoint = mean(df$density))

> mean(df$density)
[1] 0.004900266
实际上limits表示最高值颜色的彩度和最低值颜色的彩度。midpoint表示以哪个数值设定为白色,如果midpoint=0则以0值表示为白色,所有大于0值都会添加不同深度的蓝色,所有小于0值都会添加不同深度的铁红色,midpoint=0.04则以0.04表示为白色,那么图形中所有小于0.04的值都会设定不同深度的铁红色。

密度均值3点梯度:

要创建自定义的颜色梯度,使用scale_colour_gradientn()。在颜色能够代表数据的特征时很有用(例如,某个黑体的颜色或标准的地形色),或者也可以直接使用另外一些包生成调色板。
例如:vcd包生成的调色板。
> install.packages('vcd')
> library(vcd)
> f2d <- with(faithful, MASS::kde2d(eruptions, waiting, h=c(1, 10), n = 50))
> df <- with(f2d, cbind(expand.grid(x,y), as.vector(z)))
> names(df) <- c("eruptions", "waiting", "density")
> erupt <- ggplot(df, aes(waiting, eruptions, fill=density)) + geom_tile() + scale_x_continuous(expand=c(0, 0)) + scale_y_continuous(expand=c(0, 0))
> fill_gradn <- function(pal) {scale_fill_gradientn(colours=pal(7), limits=c(0, 0.04))}#pal(7)表示选取指定颜色当中的7种颜色
> erupt + fill_gradn(rainbow)#这里利用fill_gradn函数,选取rainbow当中的7种颜色,将这7种颜色作为渐变色

离散型

离散型数据有两种颜色标度。一种可以自动选择颜色,另一种可以轻松地从手工甄选地颜色集种选择颜色。
默认的配色方案,即scale_colour_hue(),可通过沿着hcl色轮选取均匀分布的色相来生成颜色。这种方案对多至约8种颜色时都能够有较好的效果,但对于更多的颜色。要区分开不同但颜色就变得比较困难。默认配色的另外一个缺点是,由于所有颜色都拥有相同的明度和彩度,所以当我们进行黑白打印时,它们就会成为几近相同的灰影。
除了这种基于计算的方案以外,另一种可选的方案是使用ColorBrewer配色,http://colorbrewer.org。可良好的应用于手工甄选颜色,这些颜色在展示较大面积是表现更佳。我们最感兴趣的是调色板,对于类别数据中的点而言是“Set1”和“Dark2”,对面积而言则是“Set2”、“Pastel1”、“Pastel2”和“Accent”。使用RColorBrewer::display.brewer.all可列出所有的调色版。例如:
> point <- qplot(brainwt, bodywt, data=msleep, log="xy", colour=vore)
> area <- qplot(log10(brainwt), data=msleep, fill=vore, binwidth=1)
> point + scale_colour_brewer(palette="Set1")#A图
> point + scale_colour_brewer(palette="Dark2")#B图
> area + scale_colour_brewer(palette="Set2")#C图
> area + scale_colour_brewer(palette="Pastel1")#D图
> area + scale_colour_brewer(palette="Pastel2")#E图
> area + scale_colour_brewer(palette="Accent")#F图

如果要用自制的离散型颜色标度,可使用下文所述的scale_colour_manual()。

你可能感兴趣的:(R,R_ggplot)