R | 一探ggplot2
在R语言的可视化工具中,ggplot2
无疑是一款简洁、强大、优雅的工具。长话短说,我们直接进入ggplot2
的代码中去理解这款十分实用的可视化函数。
本文中出现的代码引自《R数据科学》一书
ggplot2
函数可用以下的代码模板概括:
ggplot(data = <DATA>) +
<GEOM_FUNCTION>(
mapping = aes(<MAPPING>),
stat = <STAT>,
position = <POSITION>
) +
<COORINATE_FUNCTION> +
<FACET_FUNCTION>
其中,这7个参数分别为数据集(DATA
)、几何对象( GEOM_FUNCTION
)、映射集合(MAPPING
)、统计变换(STAT
)、位置调整(POSITION
)、坐标系(COORINATE_FUNCTION
)和分面模式(FACET_FUNCTION
)。
这套模板也可以作为我们学习ggplot2
的总领,搞清楚每幅图中的这7个参数并能熟练地运用它们,在可视化这个领域就有了“初窥门径”的境界了。
废话不多说,接下来就拆开这套函数,将7个参数逐个击破。
数据集
关于要输入ggplot
的数据其实应该在可视化之前就处理好了,但是要注意的是输入的是数据类型必须要是data.frame
(or other object coercible by fortify()
?)。
在上游处理好数据后,便可以使用ggplot
进行可视化处理。
映射集合
在使用aes()
函数确定x、y轴的关系以及数据后,就可以作图了。以下用ggplot2
包中自带的数据集mpg
进行绘图(散点图):
> ggplot(data = mpg) + geom_point(aes(x=displ, y=hwy))
#hwy:highway miles per gallon
#displ:engine displacement, in litres
以上我们便根据hwy~displ的映射关系作出了一个散点图。
除了x、y两个变量外,我们还可以像图中添加第三个变量——图形属性。图形属性包括图中几何对象的颜色、大小、透明度、形状等。通过添加图形属性还可以实现对图中数据的简单分组,例如我们利用车的类别(class)对mpg
中数据进行分组绘制:
> ggplot(data = mpg) +
+ geom_point(aes(x=displ,y=hwy, color=class))
ggplot还很“贴心”的加上了图例。
除了color
之外,还有其他几种图形属性,包括:size
,shape
,alpha
,group
等等。有趣的是使用shape
这一属性时,我们可以看到以下的结果:
> ggplot(data = mpg) +
+ geom_point(aes(x=displ,y=hwy, shape=class))
Warning messages:
1: The shape palette can deal with a maximum of 6 discrete values because more than
6 becomes difficult to discriminate; you have 7. Consider specifying shapes
manually if you must have them.
2: Removed 62 rows containing missing values (geom_point).
由于ggplot
一次只能显示6种形状,所以超出范围的变量被无情地丢掉了。
而想到整个图形的属性进行调整的话,只需要在aes()
函数之外调整参数即可,如:
ggplot(data = mpg) +
geom_point(aes(x=displ,y=hwy), color = "blue")
几何对象
这一部分可以说是ggplot2
集大成的一个参数,通过不同几何对象的使用,我们可以利用ggplot2
绘制散点图、折线图、直方图、箱线图等等。
顾名思义,几何对象就是用来表现数据的局和图形对象。例如,折线图使用了直线几何对象,箱线图使用矩形和直线几何对象等等。
同样地,还是刚才的例子,但我们这次绘制一个曲线图:
> ggplot(data = mpg) + geom_smooth(aes(x=displ, y=hwy))
看到这里我们应该可以发现<GEOM_FUNCTION>
仅是规定了数据绘制的几何对象,那么假如将映射关系也移至ggplot()
函数中又会如何呢?我们不妨直接动手操作一下:
> ggplot(data = mpg,aes(x=displ, y=hwy))
果不其然,由于我们没有指明几何对象,所以ggplot()
函数直接生成了hwy~displ 的一个空白图层。接下来只要指定几何对象,就可以生成刚刚的曲线图了。
> ggplot(data = mpg,aes(x=displ, y=hwy)) + geom_smooth()
BINGO!一切正如我们所料。文至此处,相信大家可能心里都明白,ggplot
实则是通过图层叠加的方式来进行绘制的。那么有没有可能在同一张图上,以不同的几何对象绘制同一组数据呢?
还是那句话,实践出真知:
> ggplot(data = mpg,aes(x=displ, y=hwy)) +
geom_smooth() +
geom_point()
通过图层叠加的办法,我们成功地绘制了同时用散点和曲线表示该组数据的图。这种方式在需要同时有两种方法描述一组数据时会收获奇效,例如某一药物处理实验,对于离散的用药结果,可以同时用直方图和散点的方式呈现。
复合图形的栗子
最重要的一点是要注意ggplot()
中的参数是对图形进行全局调整,即每一图层都会受其影响。而在<GEOM_FUNCTION>
中的参数仅是针对当前图层的局部调整。灵活地利用ggplot()
的全局映射特性也可以避免一些重复性工作。
综上所述,我们就将ggplot
中的数据集、映射关系和几何对象都较为简单地过了一遍。然而,统计变换、位置调整、坐标系和分面模式都是在特定或者微调的场合中才会进行考虑的部分。又由于本文仅是初步概述ggplot2
函数中较为关键的组成,所以上述四个组分暂时按下不表。
欲知后事如何,请听下回分解。
完。