生信自学网-速科生物-生物信息学数据库挖掘视频教程

主页 > 生信答疑 >

R-ggplot2包的介绍与学习(一)

R-ggplot2包的介绍与学习(一)

 R语言里面一个比较重要的绘图包——ggplot2,是由Hadley Wickham于2005年创建,于2012年四月进行了重大更新,作者目前的工作是重写代码,简化语法,方便用户开发和使用。ggplot2的核心理念是将绘图与数据分离,数据相关的绘图与数据无关的绘图分离,是按图层作图,有利于结构化思维,同时它保有命令式作图的调整函数,使其更具灵活性,绘制出来的图形美观,同时避免繁琐细节。ggplot2可以通过底层组件构造前所未有的图形,你所受到的限制只是你的想象力。下面我们一起来了解一下ggplot2这个强大的绘图包,希望能对大家学习有所帮助。

ggplot2图形之基本语法:

ggplot2的核心理念是将绘图与数据分离,数据相关的绘图与数据无关的绘图分离
ggplot2是按图层作图
ggplot2保有命令式作图的调整函数,使其更具灵活性
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(...)
#完整ggplot2绘图示意:
library(ggplot2)
attach(iris)
p <- ggplot(data=iris,aes(x = Sepal.Length,y = Sepal.Width))
p + geom_point(aes(colour = Species)) + stat_smooth() + 
labs(title = "Iris of Sepal.length \n According to the Sepal.Width") +
theme_classic() + theme_bw() +annotate("text",x=7,y=4,parse = T,label = "x[1]==x[2]",size=6, family="serif",fontface="italic", colour="darkred")

geom :表示几何对象,它是ggplot中重要的图层控制对象,因为它负责图形渲染的类型。
几何对象(geom_) 上面指定的图形属性需要呈现在一定的几何对象上才能被我们看到,这些承载图形属性的对象可能是点,可能是线,可能是bar

stat :统计变换 比如求均值,求方差等,当我们需要展示出某个变量的某种统计特征的时候,需要用到统计变换

annotate:添加注释 #由于设置的文本会覆盖原来的图中对应的位置,可以改变文本的透明度或者颜色 例: annotate(geom='text')会向图形添加一个单独的文本对象 annotate("text",x=23,y=200,parse=T,label = "x[1]==x[2]")


labs : labs(x = "这是 X 轴", y = "这是 Y 轴", title = "这是标题") ## 修改文字

scale_: 标度是一种函数,它控制了数学空间到图形元素空间的映射。一组连续数据可以映射到X轴坐标,也可以映射到一组连续的渐变色彩。一组分类数据可以映射成为不同的形状,也可以映射成为不同的大小,这就是与aes内的各种美学(shape、color、fill、alpha)调整有关的函数。

coord_:调整坐标,控制了图形的坐标轴并影响所有图形元素. 调整坐标 coord_flip()来翻转坐标轴。使用xlim()和ylim()来设置连续型坐标轴的最小值和最大值 coord_cartesian(xlim=c(0,100),ylim=c(0,100))

guides:调整所有的text。

theme:调整不与数据有关的图的元素的函数。theme函数采用了四个简单地函数来调整所有的主题特征:element_text调整字体,element_line调整主题内的所有线,element_rect调整所有的块,element_blank清空。theme(panel.grid =element_blank()) ## 删去网格线

facet :控制分组绘图的方法和排列形式
# 不指定数据集时,data = NULL
一个图形对象就是一个包含数据,映射,图层,标度,坐标和分面的列表,外加组件options
ggplot(数据, 映射) geom_xxx(映射, 数据) stat_xxx(映射, 数据)

# 通过“+”实现不同图层的相应累加,且越往后的图层表现在上方
点(point, text):往往只有x、y指定位置,有shape但没有fill
线(line,vline,abline,hline,stat_function等):一般是基于函数来处理位置
射(segment):特征是指定位置有xend和yend,表示射线方向
面(tile, rect):这类一般有xmax,xmin,ymax,ymin指定位置
棒(boxplot,bin,bar,histogram):往往是二维或一维变量,具有width属性
带(ribbon,smooth):透明是特征是透明的fill
补:包括rug图,误差棒(errorbar,errorbarh)
然后,就是按照你的需要一步步加图层了(使用“+”)。

基本语法:

数据(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())

几何对象:

为了指定图形类型,必须加入图层,可采用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 堆叠处理
 

 


 


(责任编辑:伏泽   微信:18520221056)

森莘老师微信二维码