Cook RR语言绘图

R绘图的生物学家(6):Plot anything

2017-10-16  本文已影响90人  lxmic
散点图

这一节是绘制各种各样的统计图,包括散点图,小提琴图,韦恩图等。

代码解释

1. 数据导入和清洗整理

# 之前已经完成了这部分的解释
# library(ggplot2)
theme_set(theme_gray(base_size = 18))

# Loading the data
filename <- "Lesson-06/variants_from_assembly.bed"

my_data <- read.csv(filename, sep="\t", quote='', stringsAsFactors=TRUE,header=FALSE)

head(my_data)

names(my_data)

names(my_data) <- c("chrom","start","stop","name","size","strand","type","ref.dist","query.dist")

head(my_data)
summary(my_data$chrom)

# Filtering and polishing data
my_data <- my_data[my_data$chrom %in% c(seq(1,22),"X","Y","MT"),]

# ordering chromosomes
my_data$chrom <- factor(my_data$chrom, levels=c(seq(1,22),"X","Y","MT"))
# ordering types
my_data$type <- factor(my_data$type, levels=c("Insertion","Deletion","Expansion","Contraction"))

2. 条形图

ggplot(my_data, aes(x=chrom,fill=type)) + geom_bar()
image.png

3. 柱状图

ggplot(my_data, aes(x=size,fill=type)) + geom_bar()
ggplot(my_data, aes(x=size,fill=type)) + geom_bar() + xlim(0,500)
ggplot(my_data, aes(x=size,fill=type)) + geom_bar(binwidth=5) + xlim(0,500)
x轴的数值进行限制 增加柱的宽度

4. 散点图

# 初始的散点图
ggplot(my_data, aes(x=ref.dist,y=query.dist)) + geom_point()
# 增加颜色,根据type类别的颜色
ggplot(my_data, aes(x=ref.dist,y=query.dist,color=type)) + geom_point()
# y轴x轴范围的控制
ggplot(my_data, aes(x=ref.dist,y=query.dist,color=type)) + geom_point() + xlim(-500,500) + ylim(-500,500)
# 颜色用size来填充
ggplot(my_data, aes(x=ref.dist,y=query.dist,color=size)) + geom_point() + xlim(-500,500) + ylim(-500,500)
初始散点图 颜色type 轴大小限制,相当于放大了 颜色变化 颜色的梯度在0-500

5. 箱图

# 基础绘图
ggplot(my_data, aes(x=type,y=size)) + geom_boxplot()
# 按类型填色
ggplot(my_data, aes(x=type,y=size,fill=type)) + geom_boxplot()
# 轴线反转
ggplot(my_data, aes(x=type,y=size,fill=type)) + geom_boxplot() + coord_flip()
原始箱图,无颜色分类 添加了图例 反转图

6. 小提琴图

# 原始图
ggplot(my_data, aes(x=type,y=size)) + geom_violin()
# 颜色添加,y轴限制大小,无图例
ggplot(my_data, aes(x=type,y=size,fill=type)) + geom_violin() + ylim(0,1000) + guides(fill=FALSE)
# 校正值添加,修改图,更加精细的分辨率
ggplot(my_data, aes(x=type,y=size,fill=type)) + geom_violin(adjust=0.2) + ylim(0,1000) + guides(fill=FALSE)
# 将数值取对数
ggplot(my_data, aes(x=type,y=size,fill=type)) + geom_violin() + 
    scale_y_log10()
原始小提琴图 添加颜色,限制y轴大小 校正之后的图 取对数后的图

7.核密度图

# 基础绘图,限制x轴,其实这个图和bar图差不多
ggplot(my_data, aes(x=size,fill=type)) + geom_density() + xlim(0,500)
# 位置改为堆栈
ggplot(my_data, aes(x=size,fill=type)) + geom_density(position="stack") + xlim(0,500)
# 增加透明度
ggplot(my_data, aes(x=size,fill=type)) + geom_density(alpha=0.5) + xlim(0,500)
# 多图分开绘制
ggplot(my_data, aes(x=size,fill=type)) + geom_density() + xlim(0,500) + facet_grid(type ~ .)
基础绘图 透明度为0.5的图 分开绘制的图

8. 点图

# 基础图的绘制
ggplot(my_data, aes(x=size,fill=type)) + geom_dotplot()
    # a dot plot makes more sense with fewer observations where each individual item matters, 
    # so let's grab the largest events only
# 可以发现,点图对于少数的数据分析很有意义,数据太多,反而不好,因此取大一些的数据集,histodot参数是柱状点,将点排列起来
large_data <- my_data[my_data$size>5000,  ] # [rows,columns]
ggplot(large_data, aes(x=size,fill=type)) + geom_dotplot(method="histodot")
# 有些点可能不会默认堆叠起来,所以要设置stackgroups参数
ggplot(large_data, aes(x=size,fill=type)) + geom_dotplot(method="histodot",stackgroups=TRUE)

数据太多 取少量数据进行绘图 堆叠起来后,显示被遮盖的数据

9.时间梯度的数据使用折线图

# 数据读取
filename <- "Lesson-06/time_course_data.txt"
time_course <- read.csv(filename, sep=",", quote='', stringsAsFactors=TRUE,header=TRUE)
time_course

# 线图绘制,颜色随机,也可以设置线的粗细
ggplot(time_course, aes(x=seconds,y=value,colour=sample)) + geom_line()
ggplot(time_course, aes(x=seconds,y=value,colour=sample)) + geom_line(size=3)

#任何图可以绘制成极地图
ggplot(time_course, aes(x=seconds,y=value,colour=sample)) + geom_line(size=3) + coord_polar()
ggplot(my_data, aes(x=type,y=size,fill=type)) + geom_violin(adjust=0.5) + ylim(0,1000) + coord_polar()
ggplot(my_data, aes(x=size,fill=type)) + geom_bar(binwidth=5) + xlim(0,500) + coord_polar()
线图 小提琴图的极地图

10. 饼图

type_counts = summary(my_data$type)
type_counts

pie(type_counts)
pie(type_counts,col=brewer.pal(length(type_counts),"Set1"))

饼图

11. 韦恩图

# 首先导入数据,一共4个列表
listA <- read.csv("Lesson-06/genes_list_A.txt",header=FALSE)
A <- listA$V1
A

listB <- read.csv("Lesson-06/genes_list_B.txt",header=FALSE)
B <- listB$V1
B

listC <- read.csv("Lesson-06/genes_list_C.txt",header=FALSE)
C <- listC$V1
C

listD <- read.csv("Lesson-06/genes_list_D.txt",header=FALSE)
D <- listD$V1
D

length(A)
length(B)
length(C)
length(D)

# 安装韦恩图包
install.packages("VennDiagram")
library(VennDiagram)

# 只能直接绘制并保存
venn.diagram(list("list C"=C, "list D"=D), fill = c("yellow","cyan"), cex = 1.5, filename="Lesson-06/Venn_diagram_genes_2.png")

venn.diagram(list(A = A, C = C, D = D), fill = c("yellow","red","cyan"), cex = 1.5,filename="Lesson-06/Venn_diagram_genes_3.png")

venn.diagram(list(A = A, B = B, C = C, D = D), fill = c("yellow","red","cyan","forestgreen"), cex = 1.5,filename="Lesson-06/Venn_diagram_genes_4.png")
C和D差异比较 A、C和D的差异比较 A、B、C和D之间差异比较

本节的内容就是绘图,ggplot2真的功能太强大了,还有许多功能不知道,真是刚刚入门。很多解释可能有错误,请指正批评。

上一篇下一篇

猜你喜欢

热点阅读