知识的价值不在于占有,而在于使用。

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

当前位置: 主页 > 生信答疑 >

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

时间:2020-08-12 14:20来源:生信自学网 作者:刘鑫 点击:
上一篇文章我们讲了如何绘制折线图,这一次我们讲讲数据分布可视化的方法,直方图、密度图、箱线图、小提琴图等都是很好的实现形式

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

Chap6. 描述数据分布

数据分布可视化方法

直方图

  1. geom_histogram()
  2. binwidth设置组距;origin设置分组原点
  3. 各分组区间左闭右开
  4. 分面:facet_grid(x ~.)
    • 修改分类标签:revalue(x, c("0"="No smoke","1"="smoke"))
    • 参数scales = free可以单独设定各个分面的Y轴标度。

我们经常想观察一批数据的分布形态,直方图、密度图、箱线图、小提琴图等都是很好的实现形式。在此,我们简略介绍直方图、密度图和箱线图,这种三种图形对我们来说更为常用。

直方图

很多人没搞清楚条形图和直方图之间的区别。条形图主要用于展示分类数据,即名义数据,各组分开而立。而直方图多用于展示数值型数据,各组相依。

单组直方图

最基本的语句就是在ggplot语句后再加geom_histogram()即可。

library(gcookbook)
library(ggplot2)
ggplot(faithful, aes(x=waiting)) + geom_histogram(bins=10)

直方图默认最大为30组,我们可以使用*binwidth来改变。

ggplot(faithful, aes(x=waiting)) +geom_histogram(binwidth=8, bins=10,fill="white", colour="black")#改为8组

 

分组直方图

分组直方图做法与其他图形一样,我们用到facet_grid(var ~ .),该方法是以var变量进行分类,做多个图形,非一个图形中做多个直方图。如果变量为数字,应当因子化。

library(MASS) #取binwidth数据
ggplot(birthwt, aes(x=bwt))+geom_histogram(fill="white",bins=10, colour="black")+facet_grid(smoke ~ .)

 

核密度曲线

geom_line(stat='identity')或者geom_density()

如果你想要做密度曲线,则用geom_density映射一连续变量。

ggplot(faithful, aes(x=waiting)) + geom_density()
#你也可以将包住的部分给填充颜色
ggplot(faithful, aes(x=waiting)) +
geom_density(fill="blue", alpha=.2) +
xlim(35, 105)
#如果你不喜欢线与下方相连,可以使用另外一种方式
ggplot(faithful, aes(x=waiting)) + geom_line(stat="density") +
expand_limits(y=0)#expand_limits使y轴范围包含0值。
#密度曲线与直方图共戏
ggplot(faithful, aes(x=waiting, y=..density..)) +
geom_histogram(fill="cornsilk", colour="grey60", size=.2) +
geom_density() +
xlim(35, 105)

 

分组密度曲线

library(MASS) #取binwidth数据
ggplot(birthwt, aes(x=bwt))+geom_histogram(fill="white", colour="black")+facet_grid(smoke ~ .)
birthwt1 <- birthwt
birthwt1$smoke <- factor(birthwt1$smoke)
ggplot(birthwt1, aes(x=bwt, fill=smoke)) + geom_density(alpha=.3)

 

频数多边形

geom_freqpoly()

频数多边形描述了数据本身的信息,而核密度曲线只是一个估计,需要认为输入带宽参数。

箱线图

geom_boxplot()
  1. 参数:width,outlier.size,outlier.shape
  2. 添加槽口(notch):用来帮助查看不同分布的中位数是否有差异。
  3. 添加均值:geom_summary(fun.y="mean",geom="point"...)

library(MASS) #取binwidth数据
ggplot(birthwt, aes(x=bwt))+geom_histogram(fill="white", colour="black")+facet_grid(smoke ~ .)

ggplot(birthwt, aes(x=factor(race), y=bwt)) + geom_boxplot()
#如果存在多个多个离群点,可用outlier.size 和outlier.shape进行大小和形状设置
ggplot(birthwt, aes(x=factor(race), y=bwt)) +
geom_boxplot(outlier.size=1.5, outlier.shape=21)
#为了看数据分布是否有偏,我们还可以增加均值与中值进行比较,主要用stat_summary把均值以菱形相展示。
ggplot(birthwt, aes(x=factor(race), y=bwt)) + geom_boxplot() +
stat_summary(fun.y="mean", geom="point", shape=23, size=3, fill="white")

 

小提琴图

geom_violin()
  1. 小提琴图用来比较多组数据分布情况的方法,其也是核密度估计。
  2. 坐标范围:从最小值到最大值,与箱线图不同。
  3. 参数:adjust调整平滑程度,scale="count"使得图的面积与每组观测值数目成正比。

p = ggplot(data=mpg, mapping=aes(x=class, y=hwy, fill=class))
p + geom_boxplot() + geom_jitter(shape=21)
p + geom_violin(alpha=0.5, width=0.9) + geom_jitter(shape=21)

对于ggplot2的介绍,我们就介绍到这里,感兴趣的学员可以自己去查找相关的资料了解,也可以关注我们的公众号,我们也会定期为大家分享一些资料和知识。


加生信自学网群
责任编辑:伏泽
作者申明:本文版权属于生信自学网(微信号:18520221056)未经授权,一律禁止转载!
BioWolf二维码生成器
------分隔线----------------------------
GEO芯片数据库挖掘生信视频教程
推荐内容
TCGA数据库挖掘文章套路生信视频教程
中药复方网络药理学文章套路生信视频教程