本文首发于“生信补给站”公众号 https://mp.weixin.qq.com/s/UMuZ1MiuKDheHk9mwA9EXA
四、标尺(Scale)
在对图形属性进行映射之后,使用标尺可以控制这些属性的显示方式,比如坐标刻度,颜色属性等。
ggplot2的scale系列函数有很多,命名和用法是有一定规律的。一般使用三个单词用_连接,如scale_fill_gradient和 scale_x_continuous,
- 第一个都是scale
- 第二个是color fill x y linetype shape size等可更改的参数
- 第三个是具体的类型
此处仅介绍颜色设置和坐标轴设置函数的一些用法,其他类似。
1 颜色标尺设置(color fill)
1.1 颜色标尺“第二个”单词选择方法
颜色的函数名第二个单词有color和fill两个,对应分组使用的颜色函数即可。
比如柱状图,fill是柱子的填充颜色,这时就使用scale_fill系列函数来更改颜色。
比如点图使用color分组,则使用scale_color_系列函数来更改颜色。
1.2 颜色标尺“第三个”单词选择方法
根据第三个单词的不同,更换的颜色分为以下几种
1)离散型:在颜色变量是离散变量的时候使用,比如分类时每一类对应一种颜色
- manual 直接指定分组使用的颜色
- hue 通过改变色相(hue)饱和度(chroma)亮度(luminosity)来调整颜色
- brewer 使用ColorBrewer的颜色
- grey 使用不同程度的灰色
2)连续型:颜色变量是连续变量的时候使用,比如0-100的数,数值越大颜色越深这样
- gradient 创建渐变色
- distiller 使用ColorBrewer的颜色
- identity 使用color变量对应的颜色,对离散型和连续型都有效
1.3 更改离散型变量的颜色函数
#数据,映射以及几何对象
p <- ggplot(diamond, aes(color))+geom_bar(aes(fill=cut)) #左上
manual 直接指定分组使用的颜色
#values参数指定颜色 #直接指定颜色 (右上) p + scale_fill_manual(values=c("red", "blue", "green","yellow","orange")) #对应分组指定 (左下) p + scale_fill_manual(values=c("Fair" = "red", "Good" = "blue", "Very Good" = "green" , Premium = "orange", Ideal = "yellow"))
#更改图例名字,对应指定并更改图例标签 (右下)
p + scale_fill_manual("class", values=c("red", "blue", "green","yellow","orange"),
breaks = c("Fair", "Good", "Very Good","Premium","Ideal"),
labels = c("一般", "好", "很好", "高级", "理想"))
brewer 使用ColorBrewer的颜色
#palette参数调用色板 library(RColorBrewer) #主要是palette参数调用色板 p + scale_fill_brewer() # 默认使用Blues调色板中的颜色(左) p + scale_fill_brewer(palette = "Greens") #使用Greens调色板中的颜色 (右) p + scale_fill_brewer(palette = "Greens",direction = -1)
grey 使用不同程度的灰色
#通过start end 两个参数指定,0为黑,1为白,都在0-1范围内
p + scale_fill_grey() # 左图
#设定灰度范围
p + scale_fill_grey(start=1, end=0) # 右图
p + scale_fill_grey(start=1, end=0.5)
1.4 更改连续型变量的颜色函数
#构建数据集 df <- data.frame( x = runif(100), y = runif(100), z1 = rnorm(100) ) p <- ggplot(df, aes(x, y)) + geom_point(aes(colour = z1))
gradient 创建渐变色#参数设定节点颜色
#设置两端颜色 p + scale_color_gradient(low = "white", high = "black") #设置中间过渡色 p + scale_color_gradient2(low = "red", mid = "white", high = "blue") #使用R预设调色板 p + scale_color_gradientn(colours =rainbow(10)) #legeng展示指定标签 p + scale_color_gradient(low = "white", high = "black", breaks=c(1,2,0.5), labels=c("a","b","c")) #legend名称 p + scale_color_gradient("black", low = "white", high = "black", limits=c(0.5,2))
distiller 使用ColorBrewer的颜色
#将ColorBrewer的颜色应用到连续变量上
p + scale_color_distiller(palette = "Spectral")
p + scale_color_distiller(palette = "Greens")
2 坐标轴标尺修改(x , y)
本部分主要是对坐标轴做如下改变,
- 更改坐标轴名称
- 更改x轴上标数的位置和内容
- 显示对一个轴做统计变换
- 只展示一个区域内的点
- 更改刻度标签的位置
实现上面的这些可以使用scale_x等函数,同时像xlab这样的函数实现其中某一方面的功能,但是用起来更加方便
因为这里的数据也有连续和离散之分,所以也要使用不同的函数来实现。
# 横坐标是离散变量,纵坐标是连续变量 p <- ggplot(mtcars, aes(factor(cyl), mpg)) + geom_point() # 更改坐标轴名称 p + scale_x_discrete("cyl") # 更改横轴标度 p + scale_x_discrete(labels = c("4"="a","6"="b","8"="c")) # 指定横轴顺序以及展示部分 p + scale_x_discrete(limits=c("6","4"))
# 连续变量可以更改标度(图与上相似,略) p + scale_y_continuous("ylab_mpg") p + scale_y_continuous(breaks = c(10,20,30)) p + scale_y_continuous(breaks = c(10,20,30), labels=scales::dollar) p + scale_y_continuous(limits = c(10,30)) # 连续变量可以更改标度,还可以进行统计变换 p + scale_y_reverse() # 纵坐标翻转,小数在上面,大数在下面 p + scale_y_log10() p + scale_y_continuous(trans = "log10") p + scale_y_sqrt() # 更改刻度标签的位置 p + scale_x_discrete(position = "top") + scale_y_continuous(position = "right")
注:除使用scale参数进行设置外,后面会介绍使用更简单易用的函数。