网站最近更新

© 乙回庐 2019. All rights reserved.

用ggplot绘图(五)

scale:度量

在图形中,数据使用什么几何类型来表示是很关键的(比如是散点啊,还是曲线),那么再定义了类型之后,紧接的问题就是几何类型的属性是什么?这个问题的回答,在ggplot中全部被归纳到了scale里面,这些属性包括颜色、填充、大小、透明度、形状、坐标轴的尺度(线性的或者对数的或者时间尺度的或者反向的等等)。那么,让我们来看看scale吧!

scale在ggplot里是一个重要的概念,它影响绘图过程的几个环节。其中包括数据的变换,数据的取值范围的确定和最终的映射过程。大部分的scale是通过continuous_scalediscrete_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

剩下的alphasize很简单,只要注意变量类型一般的使用就没有什么困难了。到这里关于scale的内容就介绍完了。下面还能讲什么呢?答案是,会使用这些功能你已经可以完成大部分需求的工作了,你可能需要的是更多的想象力和查看其他人绘图的范例。在下一讲我们会介绍几乎所有教程里一来就介绍的qplot

此文文长3503字,君不评论一二?
亲,给点评论吧!

展开本分类索引