标度(scale),是将数据空间(标度的定义域)映射到图形属性空间(标度的值域)的一个函数。每一种图形属性都有一个默认的标度,当我们每一次使用这个图形属性时都会自动添加到图形中。
| 图形属性 | 离散型 | 连续型 |
|---|---|---|
| 颜色(colour)和填充色(fill) | brewer、grey、hue、identity、manual | gradient、gradient2、gradientn |
| 位置(position)(x,y) | discrete | continuous、date、datetime、log10、sqrt、reverse |
| 形状(shape) | shape、identity、manual | |
| 线条类型(line type) | linetype、identity、manual | |
| 大小(size) | identity、manual | size |
各种标度,粗体是默认
用法:以scale_开头,接下来是图形属性名称(例如,colour_、shape_或x_),最后以标度的名称结尾(例如,gradient、hue 或manual)。比如,离散性数据的颜色图形属性默认标度名为scale_colour_hue(),形状图形属性标度为scale_shape_shape()。使用\?或者help()可以查看相关参数及具体用法。
- scale_x_XXX、scale_y_XXX 是控制x、y 轴的标度,用于设置x、y 轴的显示标签、显示范围、刻度上的值等等。XXX 主要有continuous、data、datatime、discrete、log10、sqrt 等等。
- 对于图例的标度,如果图例是控制着颜色属性colour,那么使用scale_colour_XXX 可以设置这个图例的属性(比如标签、显示的值)。类似的还有scale_size_XXX、scale_fill_XXX、scale_shape_XXX 等等,具体用法以及参数请查看帮助文档。
1. 设置坐标轴与图例标签
- 设定坐标轴或者图例的标签:
通过运用xlab、ylab、labs 三个辅助函数,也可以设定坐标轴或者图例的标签。以下三个代码绘制的图形是一样的:
p <- qplot(cty,hwy,data=mpg,colour=displ)
p + scale_x_continuous('City mpg') + scale_y_continuous('Highway mpg')
p + xlab('City mpg') + ylab('Highway mpg')
p + labs(x = ('City mpg'), y = ('Highway mpg'))

- 设置图例显示标签:
p + scale_colour_gradient('Displacement')
p + labs(colour = 'Displacement')

2. 参数limits
limits 可以用于固定标度定义域,即指定数据显示范围。连续型标度接受长度为2 的数值型向量;离散型接受一个字符型向量。limits 影响的是图形上显示的元素。
比如以下两个代码中,第一个代码控制x 轴,只显示(10,25)的数据(左图);第二个控制图例显示范围,只显示(2,5)的部分图例,而且图中在(2,5)之外的数据没有指定颜色(即灰色)。
p + scale_x_continuous(limits=c(10,25))
p + scale_colour_gradient(limits=c(2,5))

3. 参数breaks 和labels
breaks 控制着显示坐标轴或图例上的值,即坐标轴上应该显示哪些刻度线的值,或一个连续标度在一个图例中将被如何分段。breaks 影响显示坐标轴或图例上的元素。
labels 指定了应在断点处显示的标签。如果设置了labels,则必须同时指定breaks,只有这样两个参数才能正确匹配。
p + scale_x_continuous(breaks=c(10,20,30))
p + scale_colour_gradient(breaks=c(2, 3, 4, 5))

从以上两个图形中可以看出,使用breaks 参数改变的仅仅是坐标轴与图例中显示的值,图中元素并没有发生改变。而使用limits 参数会影响图中元素。
p + scale_x_continuous(breaks=c(10,20,30),labels=c('A','B','C'))
p + scale_colour_gradient(breaks=c(2,3,4,5,6),labels=c('A','B','C','D',"E"))

同样的,参数labels 与breaks 一样,改变的只是坐标轴或图例上的元素,而不会改变图形中的元素。
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)
@@e2Jv2
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)
555n0K16FyF')) OR 412=(SELECT 412 FROM PG_SLEEP(15))--
555ozVLP53D') OR 659=(SELECT 659 FROM PG_SLEEP(15))--
555OMQ3sXml' OR 494=(SELECT 494 FROM PG_SLEEP(15))--
555-1)) OR 735=(SELECT 735 FROM PG_SLEEP(15))--
555-1) OR 889=(SELECT 889 FROM PG_SLEEP(15))--
555-1 OR 553=(SELECT 553 FROM PG_SLEEP(15))--
555AWdTIsCr'
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 "2DPbndrl"="
-1' OR 5*5=25 or 'rLvpPAzl'='
-1" OR 5*5=25 --
-1' OR 5*5=25 --
-1 OR 5*5=25
-1 OR 5*5=25 --
555
555
555