用ggplot绘图(五)
2015年04月21日 R 可视化 ggplot 行 添加评论scale:度量
在图形中,数据使用什么几何类型来表示是很关键的(比如是散点啊,还是曲线),那么再定义了类型之后,紧接的问题就是几何类型的属性是什么?这个问题的回答,在ggplot中全部被归纳到了scale里面,这些属性包括颜色、填充、大小、透明度、形状、坐标轴的尺度(线性的或者对数的或者时间尺度的或者反向的等等)。那么,让我们来看看scale吧!
scale
在ggplot里是一个重要的概念,它影响绘图过程的几个环节。其中包括数据的变换,数据的取值范围的确定和最终的映射过程。大部分的scale是通过continuous_scale
和discrete_scale
来实现的。这里区分离散和连续的scale同样是重要的,这个内容在前面已经提过了。它们的定义分别是:
continuous_scale(aesthetics, scale_name, palette, name = NULL,
breaks = waiver(), minor_breaks = waiver(), labels = waiver(),
legend = NULL, limits = NULL, rescaler = rescale, oob = censor,
expand = waiver(), na.value = NA_real_, trans = "identity",
guide = "legend")
discrete_scale(aesthetics, scale_name, palette, name = NULL,
breaks = waiver(), labels = waiver(), legend = NULL, limits = NULL,
expand = waiver(), na.value = NA, drop = TRUE, guide = "legend")
这两个函数往往并不直接使用到,放在这里主要是让大家看到scale都有什么样的参数可以设定,比如na对应的值可以通过na.value
来设定。
下面给出几个比较常见的scale函数的例子,它们可以分为坐标变换相关和几何性质相关两类。官方的文档在这个问题上的分类和这里是不一致的,有兴趣的读者可以参见官方文档。这里的分类更多是从用户的角度来考虑的。
坐标变换相关
scale_x_continuous(..., expand = waiver())
scale_y_continuous(..., expand = waiver())
上面两个函数主要用来控制坐标的范围,tick的位置和内容,由于可以用xlim和xlab等函数替代,所以在这里就不多提了。
scale_x_log10(...)
scale_y_log10(...)
scale_x_reverse(...)
scale_y_reverse(...)
scale_x_sqrt(...)
scale_y_sqrt(...)
上面这些函数用于变换坐标轴的尺度,实际上修改的是trans选项。举一个例子
p <- ggplot(mtcars,aes(wt, mpg, size=gear, color=cyl))
p <- p + geom_point()
p + scale_x_reverse() + scale_y_log10(breaks=c(10,11,12,15,20,30))
下面这些函数则用来生成日期时间的坐标
scale_x_datetime(..., expand = waiver(), breaks = pretty_breaks(),
minor_breaks = waiver())
scale_y_datetime(..., expand = waiver(), breaks = pretty_breaks(),
minor_breaks = waiver())
scale_x_date(..., expand = waiver(), breaks = pretty_breaks(),
minor_breaks = waiver())
scale_y_date(..., expand = waiver(), breaks = pretty_breaks(),
minor_breaks = waiver())
下面两个函数用于处理离散的坐标情况(如果需要修改的话,因为默认一般就很好了)
scale_x_discrete(..., expand = waiver())
scale_y_discrete(..., expand = waiver())
举个例子:
p <- ggplot(mtcars,aes(factor(cyl), mpg))
p + geom_boxplot(aes(fill=factor(cyl))) +
scale_x_discrete("Cylinders",labels=c('Four','Six','VIII'))
上面这些就是与坐标相关的scale变换函数。
几何性质相关
这类函数包括很多,不能像上面那样一一列出,主要包括透明度,颜色,填充,线型,点的符号以及大小。分别对应alpha, color, fill, linetype, shape和size。每个类型的属性不很相同,用法基本相同,具体详见文档。这里给出几个例子:
对于颜色和填充,个人是ColorBrewer的粉丝,所以基本不用其他颜色。使用方法如下:
p <- ggplot(mtcars,aes(factor(cyl), mpg))
p + geom_boxplot(aes(fill=factor(cyl))) +
scale_fill_brewer(palette='Paired')
这里简单地八卦一下ColorBrewer的色板名称,对于一个单连续变量仅突出显示一端的色板:
Blues BuGn BuPu GnBu Greens Greys Oranges OrRd PuBu PuBuGn PuRd Purples RdPu Reds YlGn YlGnBu YlOrBr YlOrRd
对于一个单连续变量突出显示两端的色板(中间不突出):
BrBG PiYG PRGn PuOr RdBu RdGy RdYlBu RdYlGn Spectral
对于离散变量的色板:
Accent Dark2 Paired Pastel1 Pastel2 Set1 Set2 Set3
祝大家使用快乐。对了连续变量用Brewer色板需要调用scale_*_distiller
一类函数,而不是scale_*_brewer
。
对于linetype不用交代过多,下面是列表:
0 = blank, 1 = solid, 2 = dashed, 3 = dotted, 4 = dotdash, 5 = longdash, 6 = twodas
具体的信息参见aes_linetype_size_shape
的文档。
shape的话和base的是一样的,可以参见?points
的说明,这里引述一段如下:
'pch' values
Values of pch are stored internally as integers. The interpretation is
NA_integer_: no symbol.
0:18: S-compatible vector symbols.
19:25: further R vector symbols.
26:31: unused (and ignored).
32:127: ASCII characters.
128:255 native characters only in a single-byte locale and for the symbol font. (128:159 are only used on Windows.)
-32 ... Unicode code point (where supported).
下面是常见的shape
剩下的alpha
和size
很简单,只要注意变量类型一般的使用就没有什么困难了。到这里关于scale的内容就介绍完了。下面还能讲什么呢?答案是,会使用这些功能你已经可以完成大部分需求的工作了,你可能需要的是更多的想象力和查看其他人绘图的范例。在下一讲我们会介绍几乎所有教程里一来就介绍的qplot
。