ggplot2的核心理念是将绘图与数据分离,数据相关的绘图与数据无关的绘图分离。按图层作图,保有命令式作图的调整函数,使其更具灵活性,并将常见的统计变换融入到了绘图中。
ggplot的绘图有以下几个特点:第一,有明确的起始(以ggplot函数开始)与终止(一句语句一幅图);其二,图层之间的叠加是靠“+”号实现的,越后面其图层越高。
ggplot图的元素可以主要可以概括如下:最大的是plot(指整张图,包括background和title),其次是axis(包括stick,text,title和stick)、legend(包括backgroud、text、title)、facet这是第二层次,其中facet可以分为外部strip部分(包括backgroud和text)和内部panel部分(包括backgroud、boder和网格线grid,其中粗的叫grid.major,细的叫grid.minor)。
ggplot2里的所有函数可以分为以下几类:用于运算(我们在此不讲,如fortify_,mean_等)初始化、展示绘图等命令(ggplot,plot,print等)按变量组图(facet_等)。
真正的绘图命令(stat_,geom_,annotate),这三类就是实现一个函数一个图层的核心函数。
微调图型:严格意义上说,这一类函数不是再实现图层,而是在做局部调整。
aes : 同样适用于修改geom_XXX() aes参数控制了对哪些变量进行图形映射,以及映射方式、图形属性(aes) 横纵坐标、点的大小、颜色,填充色等。
完整公式总结:
ggplot(data = , aes(x = , y = )) +
geom_XXX(...) + ... + stat_XXX(...) + ... +
annotate(...) + ... + labs(...) +
scale_XXX(...) + coord_XXX(...) + guides(...) + theme(...) +
facet_XXX(...)
基本语法:
数据(data):将要展示的数据;
映射(mapping):数据中的变量到图形成分的映射;
几何对象(geom):用来展示数据的几何对象,如geom_point,geom_bar,geom_abline;
图形属性(aes):图形属性决定了图形的外观,如字体大小、标签位置及刻度线;
标度(scale):决定了变量如何被映射到图形属性上;
坐标(coordinate):数据如何被映射到图中。如coord_cartesian:笛卡尔坐标、coord_polar:极坐标、coord_map:地理投影;
统计变换(stat):对数据进行汇总,如箱线图:stat_boxplot、线图:stat_abline、直方图:stat_bin。
分面(facet):用来描述数据如何被拆分为子集,以及对不同子集是如何绘制的。
位置调整(position):对图形位置做精细控制。
创建ggplot对象:使用ggplot函数:
ggplot(data,mapping=aes(),...,environment=globalenv())。
参数 |
描述 |
默认值 |
data |
要绘图的数据框 |
|
mapping |
一系列图形属性的映射 |
aes() |
environment |
图形属性参数所在的环境 |
globalenv() |
... |
|
|
几何对象:
为了指定图形类型,必须加入图层,可采用layer()函数。可以使用“point”等短名称来指定几何对象。layer函数允许将几何对象作为名称和值的配对,这样就不需要指出函数全名,而只需要geom_后面的部分。几何对象如下:
几何对象函数 |
描述 |
geom_abline |
线图,由斜率和截距指定 |
geom_area |
面积图(即连续的条形图) |
geom_bar |
条形图 |
geom_bin2d |
二维封箱的热图 |
geom_blank |
空的几何对象,什么也不画 |
geom_boxplot |
箱线图 |
geom_contour |
等高线图 |
geom_crossbar |
crossbar图(类似于箱线图,但没有触须和极值点) |
geom_density |
密度图 |
geom_density2d |
二维密度图 |
geom_errorbar |
误差线(通常添加到其他图形上,比如柱状图、点图、线图等) |
geom_errorbarh |
水平误差线 |
geom_freqpoly |
频率多边形(类似于直方图) |
geom_hex |
六边形图(通常用于六边形封箱) |
geom_histogram |
直方图 |
geom_hline |
水平线 |
geom_jitter |
点、自动添加了扰动 |
geom_line |
线 |
geom_linerange |
区间,用竖直线来表示 |
geom_path |
几何路径,由一组点按顺序连接 |
geom_point |
点 |
geom_pointrange |
一条垂直线,线的中间有一个点(与Crossbar图和箱线图相关,可以用来表示线的范围) |
geom_polygon |
多边形 |
geom_quantile |
一组分位数线(来自分位数回归) |
geom_rect |
二维的长方形 |
geom_ribbon |
彩虹图(在连续的x值上表示y的范围,例如Tufte著名的拿破仑远征图) |
geom_rug |
触须 |
geom_segment |
线段 |
geom_smooth |
平滑的条件均值 |
geom_step |
阶梯图 |
geom_text |
文本 |
geom_tile |
瓦片(即一个个的小长方形或多边形) |
geom_vline |
竖直线 |
统计变换
统计变换函数 |
描述 |
stat_abline |
添加线条,用斜率和截距表示 |
stat_bin |
分割数据,然后绘制直方图 |
stat_bin2d |
二维密度图,用矩阵表示 |
stat_binhex |
二维密度图,用六边形表示 |
stat_boxplot |
绘制带触须的箱线图 |
stat_contour |
绘制三维数据的等高线图 |
stat_density |
绘制密度图 |
stat_density2d |
绘制二维密度图 |
stat_function |
添加函数曲线 |
stat_hline |
添加水平线 |
stat_identity |
绘制原始数据,不进行统计变换 |
stat_qq |
绘制Q-Q图 |
stat_quantile |
连续的分位线 |
stat_smooth |
添加平滑曲线 |
stat_spoke |
绘制有方向的数据点(由x和y指定位置,angle指定角度) |
stat_sum |
绘制不重复的取值之和(通常用在三点图上) |
stat_summary |
绘制汇总数据 |
stat_unique |
绘制不同的数值,去掉重复的数值 |
stat_vline |
绘制竖直线 |
标度函数
标度函数 |
描述 |
scale_alpha |
alpha通道值(灰度) |
scale_brewer |
调色板,来自colorbrewer.org网站展示的颜色标度 |
scale_continuous |
连续标度 |
scale_data |
日期 |
scale_datetime |
日期和时间 |
scale_discrete |
离散值 |
scale_gradient |
两种颜色构建的渐变色 |
scale_gradient2 |
3中颜色构建的渐变色 |
scale_gradientn |
n种颜色构建的渐变色 |
scale_grey |
灰度颜色 |
scale_hue |
均匀色调 |
scale_identity |
直接使用指定的取值,不进行标度转换 |
scale_linetype |
用线条模式来展示不同 |
scale_manual |
手动指定离散标度 |
scale_shape |
用不同的形状来展示不同的数值 |
scale_size |
用不同大小的对象来展示不同的数值 |
坐标系
坐标函数 |
描述 |
coord_cartesian |
笛卡儿坐标 |
coord_equal |
等尺度坐标(斜率为1) |
coord_flip |
翻转笛卡儿坐标 |
coord_map |
地图投影 |
coord_polar |
极坐标投影 |
coord_trans |
变换笛卡儿坐标 |
分面
分面函数 |
描述 |
facet_grid |
将分面放置在二维网格中 |
facet_wrap |
将一维的分面按二维排列 |
位置
定位函数 |
描述 |
position_dodge |
并列 |
position_fill |
填充 |
position_identity |
不对位置进行处理 |
position_jitter |
扰动处理 |
position_stack |
堆叠处理 |