BGI-College生信入门——9、R语言基础(二)

ggplot2

Elegant Graphics for Data Analysis,用于数据分析的精美图形


ggplot2是一个用于数据统计和绘图的R包

与其它绘图包不同,ggplot2有自己的基础语法


ggplot2的逻辑就是基于图层的概念,把一张统计图中涵盖的元素按属性可以分成5大类:

几何对象

geometric object,简写成geoms,代表图中的点、线和多边形等

尺度

aesthetic attributes,简写成aes,包括颜色、形状和大小等

数据的统计变换

statistical transformation,简写stats

总结数据,例如分类统计绘制直方图,或总结得出一个二维的线性模型

坐标系

coordinate system,简写coord

通过坐标轴和网格线展示

一般采用笛卡尔坐标系,同时支持其它坐标系(极坐标、地图投射等)

分面

facet,指定绘图窗口划分为若干个子窗口


熟悉PS的朋友可能知道,在PS里绘图我们通过不断新建图层达到添加新元素的目的,ggplot2的图层概念与之类似

安装ggplot2

install.packages("ggplot2")

使用qplot绘制简单图形

ggplot2内置的数据集

绘图所用数据集为ggplot2内置的diamonds,该数据是53,940个钻石的价格和品质信息

钻石的4C标准:carat(克拉)、cut(切工)、color(色泽)和clarity(透明度)

head(diamonds)

carat    cut    color    clarity    depth    table    price    x    y    z

0.23    Ideal    E    SI2    61.5    55    326    3.95    3.98    2.43

0.21    Premium    E    SI1    59.8    61    326    3.89    3.84    2.31

0.23    Good    E    VS1    56.9    65    327    4.05    4.07    2.31

0.29    Premium    I    VS2    62.4    58    334    4.2    4.23    2.63

0.31    Good    J    SI2    63.3    58    335    4.34    4.35    2.75

0.24    Very Good    J    VVS2    62.8    57    336    3.94    3.96    2.48

图1  x、y、z、table和depth的测量方式

另外我们会从diamonds数据中随机产生一个包含100个钻石品质信息的数据子集dsmall

set.seed(2022)#设置随机数种子,根据种子编号产生可重复的伪随机数

dsmall <- diamonds[sample(nrow(diamonds), 100), ]#产生拥有100个钻石信息的小数据集

qplot绘制散点图

qplot(carat, price, data = diamonds)

图2  钻石的重量(克拉)和价格的关系

变换变量

qplot(log(carat),log(price), data = diamonds)

图3  钻石重量(克拉)的对数和价格对数的关系

映射颜色、大小、形状和其它几何属性

颜色的映射

qplot(carat, price, data = dsmall, colour = color)

图4 根据钻石的色泽(color)对散点进行颜色分类

大小的映射

qplot(carat, price, data = dsmall, size = x*y*z)

图5  将x、y、z的乘积映射到散点的大小

形状的映射

qplot(carat, price, data = dsmall, shape = cut)

图6  根据钻石的切工(cut)对数据划分同形状

手动设置相关几何属性

qplot(carat, price, data = dsmall, colour = I("red"))#自定义颜色

图7 自定义所有散点颜色为红色

qplot(carat, price, data = dsmall, size = I(5))#自定义大小

图8  自定义所有散点大小为5

qplot(carat, price, data = dsmall, shape = I("triangle"))#自定义散点形状为三角形

图9  自定义散点形状为三角形

qplot(carat, price, data = diamonds, alpha = I(1/10))#自定义透明度为默认的1/10

qplot(carat, price, data = diamonds, alpha = I(1/100))#自定义透明度为默认的1/100

图10  设定散点透明度为默认的1/10
图11  设定散点透明度为默认的1/100

绘制几何图形

qplot除了能绘制一般的散点图,还可以绘制一些二维的几何图形

qplot(carat, price, data = dsmall, geom ="point")#提供x,y时,qplot()默认绘制散点图

qplot(carat, price, data = dsmall, geom = c("point","smooth"))#增加平滑的拟合曲线

图12  给散点图增加拟合曲线

qplot(cut, price, data = dsmall, geom ="boxplot")#绘制箱线图以总结点的分布情况

图13  钻石不同切工(cut)下价格的分布情况

qplot(date, unemploy/pop, data = economics, geom ="line")#绘制数据之间的连线,用于观察时间和其它变量的关系

由于diamonds数据中没有时间变量,这里使用内置数据集economics作为演示

图14  随时间推移失业率的变化曲线

一维数据绘图

连续变量

qplot(carat, data = diamonds, geom ="histogram")#绘制直方图

图15  钻石重量(carat)的频数直方图

qplot(color, price/carat, data = diamonds, geom ="jitter")#绘制抖动散点图

图16  钻石不同色泽的单价分布

经常做GWAS分析的朋友想必非常熟悉,这个抖动散点图不就是曼哈顿图吗

qplot(carat, data = diamonds, geom ="density")#绘制密度分布图

图17  钻石分布密度

离散变量

qplot(cut, data = diamonds, geom ="bar")#绘制条形图

图18  钻石切工分布条形图

faceting分面

它根据某个变量拆分数据为子集,并以相同的排列展示方便比较每个子集

qplot(carat, data = diamonds, facets = cut ~ .,geom ="histogram", binwidth = 0.01, xlim = c(0, 2))#这里根据钻石的切工(cut)进行分面,绘制直方图并设定箱宽为0.01,x轴范围在0~2

图19  以钻石切工为条件显示钻石重量的分布情况

你可能感兴趣的:(BGI-College生信入门——9、R语言基础(二))