美文网首页Cook RR语言绘图
R绘图的生物学家(6):Plot anything

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

作者: lxmic | 来源:发表于2017-10-16 23:23 被阅读90次
    散点图

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

    代码解释

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

    相关文章

      网友评论

        本文标题:R绘图的生物学家(6):Plot anything

        本文链接:https://www.haomeiwen.com/subject/ksicuxtx.html