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 |
另外我们会从diamonds数据中随机产生一个包含100个钻石品质信息的数据子集dsmall
set.seed(2022) #设置随机数种子,根据种子编号产生可重复的伪随机数 dsmall <- diamonds[sample(nrow(diamonds), 100), ] #产生拥有100个钻石信息的小数据集
qplot绘制散点图
qplot(carat, price, data = diamonds)
变换变量
qplot(log(carat), log(price), data = diamonds)
映射颜色、大小、形状和其它几何属性
颜色的映射
qplot(carat, price, data = dsmall, colour = color)
大小的映射
qplot(carat, price, data = dsmall, size = x*y*z)
形状的映射
qplot(carat, price, data = dsmall, shape = cut)
手动设置相关几何属性
qplot(carat, price, data = dsmall, colour = I("red")) #自定义颜色
qplot(carat, price, data = dsmall, size = I(5)) #自定义大小
qplot(carat, price, data = dsmall, shape = I("triangle")) #自定义散点形状为三角形
qplot(carat, price, data = diamonds, alpha = I(1/10)) #自定义透明度为默认的1/10 qplot(carat, price, data = diamonds, alpha = I(1/100)) #自定义透明度为默认的1/100
绘制几何图形
qplot除了能绘制一般的散点图,还可以绘制一些二维的几何图形
qplot(carat, price, data = dsmall, geom = "point") #提供x,y时,qplot()默认绘制散点图 qplot(carat, price, data = dsmall, geom = c("point", "smooth")) #增加平滑的拟合曲线
qplot(cut, price, data = dsmall, geom = "boxplot") #绘制箱线图以总结点的分布情况
qplot(date, unemploy/pop, data = economics, geom = "line") #绘制数据之间的连线,用于观察时间和其它变量的关系
由于diamonds数据中没有时间变量,这里使用内置数据集economics作为演示
图14 随时间推移失业率的变化曲线
一维数据绘图
连续变量
qplot(carat, data = diamonds, geom = "histogram") #绘制直方图
qplot(color, price/carat, data = diamonds, geom = "jitter") #绘制抖动散点图
经常做GWAS分析的朋友想必非常熟悉,这个抖动散点图不就是曼哈顿图吗
qplot(carat, data = diamonds, geom = "density") #绘制密度分布图
离散变量
qplot(cut, data = diamonds, geom = "bar") #绘制条形图
faceting分面
它根据某个变量拆分数据为子集,并以相同的排列展示方便比较每个子集
qplot(carat, data = diamonds, facets = cut ~ .,geom = "histogram", binwidth = 0.01, xlim = c(0, 2)) #这里根据钻石的切工(cut)进行分面,绘制直方图并设定箱宽为0.01,x轴范围在0~2
图19 以钻石切工为条件显示钻石重量的分布情况