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真的功能太强大了,还有许多功能不知道,真是刚刚入门。很多解释可能有错误,请指正批评。