美文网首页作图走进转录组单细胞基因组学
清明节后第一天从画一张图开始

清明节后第一天从画一张图开始

作者: 单细胞空间交响乐 | 来源:发表于2021-04-06 14:47 被阅读0次

    今天我们的任务就是复现一张图,如下:

    11.png

    来吧,这个图的复现不见得简单,不信大家可以尝试一下:

    首先来学习一下ggrepel包

    用法是geom_text(label)_repel(aes(x,y,label=,....)),text和label的区别我在这里就不多说了,大家都应该知道
    我们主要来学习一下参数:

    segment.color:连接点与标签的线段的颜色
    segment.size:线段的粗细
    segment.alpha:线段的透明度
    box.padding:文本框周边填充
    point.padding:点周围填充
    arrow:grid:arrow提供的箭头
    force:强制性将重叠文本散开
    max.oter:最大迭代次数
    nudge_x/y:标签开始位置在坐标轴的移动距离
    direction:允许标签的方向,x、y or both
    

    接下来我们要开始这张图的复现了。

    首先加载包

    library(ggplot)
    library(ggrepel)
    

    文件的准备


    图片.png

    是不是很熟悉??? 就是Seurat的差异分析的结果

    为了复现这张图,我们需要对数据进行一定的处理
    添加P值标签和label

    x$label = ifelse(x$p_val_adj < 0.01 , "adjusted P-val < 0.01","adjusted P-val >= 0.01")
    y  =   0.00001
    x$gene = ifelse(x$p_val_adj < y , x$gene_name,"")
    

    数据里多了两列label和gene

    接下来,我们要画图了

    p = ggplot(x,aes(x$cluster,x$avg_logFC,color = x$label,size = 1)) + geom_jitter()
    
    图片.png

    添加标签

    p = p + geom_text_repel(aes(x$cluster,x$avg_logFC,label = x$gene))
    
    图片.png

    gene的标签太多了,我们适当减少一点

    y = 0.0000000000001
    ggplot(x,aes(x$cluster,x$avg_logFC,color = x$label)) + geom_jitter(size = 0.5) + geom_text_repel(aes(x$cluster,x$avg_logFC,label = x$gene))
    
    图片.png

    但是大家发现了没有,gene的标签字体是红色,我们需要黑色

    ggplot(x,aes(x$cluster,x$avg_logFC,color = x$label)) + geom_jitter(size = 0.5) + geom_text_repel(aes(x$cluster,x$avg_logFC,label = x$gene,color = 'black'))
    
    图片.png

    可见,设置color不听指挥,这是什么原因呢?听过我讲R语言课程的同学应该知道,绘图对象对我们后续的操作产生了干扰,我们需要调整一下

    p = ggplot(x) + geom_jitter(aes(x$cluster,x$avg_logFC,color = x$label),size= 0.8) + geom_text_repel(aes(x$cluster,x$avg_logFC,label = x$gene))
    
    图片.png

    添加主题

     p = p + theme_classic()
    
    图片.png

    我们先把点的颜色调整和图一致

    p = p + scale_color_manual(values = c('red','black'))
    
    图片.png

    接下来我们要绘制一些细节了

    p  = p + labs(x= 'Cluster',y = 'avgerage logFC', color = '')+ theme(axis.line.x = element_blank(),axis.text.x = element_blank(),axis.ticks.x = element_blank())
    

    然后是图例点的大小和位置(根据自己的需求进行调整)

    p = p +guides(color = guide_legend(override.aes = list(size = 5))) + theme(legend.position = c(0.9,0.9))
    
    图片.png

    然后调节各个文本的大小

    p = p+ theme(axis.title = element_text(size = 15,family = 'font'),axis.text = element_text(size = 10),legend.text = element_text(size = 10))
    
    图片.png

    接下来就要加柱子了

    对数据集新加一列,这部分什么作用,我就不多说了,大家自己琢磨一下吧

    x$bar  = 0
    for (i in 0:11){
      x[which(x$cluster == as.numeric(i)),][1,11] = 0.4
    }
    x$bar_1 = 0
    for (i in 0:12){
      x[which(x$cluster == as.numeric(i)),][1,12] = -0.4
    }
    

    好,添加柱子

    p = p+ geom_bar(aes(x$cluster,x$bar,fill = as.factor(x$cluster)),stat= 'identity') +scale_fill_discrete(guide =F) + geom_bar(aes(x$cluster,x$bar_1,fill = as.factor(x$cluster)),stat= 'identity') +scale_fill_discrete(guide =F)
    
    图片.png

    好,马上就要大功告成了。
    设置一下颜色梯度

    defined_cols = c('#e6194b', '#3cb44b', '#ffe119', '#4363d8', '#f58231', '#911eb4', '#46f0f0', '#f032e6', '#bcf60c', '#fabebe', '#008080', '#e6beff', '#9a6324')
    p = p + scale_fill_manual(values = defined_cols,guide = F)
    
    图片.png

    好,更进一步了,接下来就是添加文本

    ###创建数据集
    x = c(0,1,2,3,4,5,6,7,8,9,10,11,12)
    y = c(0,0,0,0,0,0,0,0,0,0,0,0,0)
    label = x
    zhao = data.frame(x,y,label)
    p = p + geom_text(data= zhao,aes(zhao$x,zhao$y,label=zhao$label),size = 10)
    
    图片.png

    到此为止,我们大功告成

    生活很好,有你更好

    相关文章

      网友评论

        本文标题:清明节后第一天从画一张图开始

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