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

ggplot2

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

ggplot2是一个用于数据统计和绘图的R包
与其它绘图包不同,ggplot2有自己的基础语法

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

  1. 几何对象
    geometric object,简写成geoms,代表图中的点、线和多边形等
  2. 尺度
    aesthetic attributes,简写成aes,包括颜色、形状和大小等
  3. 数据的统计变换
    statistical transformation,简写stats
    总结数据,例如分类统计绘制直方图,或总结得出一个二维的线性模型
  4. 坐标系
    coordinate system,简写coord
    通过坐标轴和网格线展示
    一般采用笛卡尔坐标系,同时支持其它坐标系(极坐标、地图投射等)
  5. 分面
    facet,指定绘图窗口划分为若干个子窗口

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

安装ggplot2

install.packages("ggplot2")

使用qplot绘制简单图形

ggplot2内置的数据集

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

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

head(diamonds)

  

caratcutcolorclaritydepthtablepricexyz
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  以钻石切工为条件显示钻石重量的分布情况

posted @ 2022-09-19 10:45  华大基因学院  阅读(152)  评论(0编辑  收藏  举报