火山图新画法

image.png

整理思路:
先画出中间的火山图,再画左右两张放大版的图,最后用AI将三张图拼接到一起,钢笔工具画出中间连接的小T形,同色的小矩形把连接处的实线盖住,打造出一种藕断丝连的神秘感(伪。

1. 数据输入和清洗

数据的输入为 DESeq2的输出 'res'


res

接下来进行一些清洗,整理成画图的形式

#增加基因名一列
res<-cbind(rownames(res),res)
colnames(res)[1]<-'Symbol'

#增加不同的颜色,将P矫正<0.05且log2FC的绝对值>1作为阈值,表达上调为红色,表达下调为蓝色
a <- dim(res)[1]
res$group<-sapply(1:a,function(i){if(res$log2FoldChange[i]>1 & res$padj[i] < 0.05){"#dd6a64"}
else if(res$log2FoldChange[i]<(-1) & res$padj[i] < 0.05){"#6d95e6"}else{"grey40"}})
#增加不同点的尺寸,这里可以根据自己的喜好自定义
res$size<-sapply(1:a,function(i){if(abs(res$log2FoldChange[i])>1 & res$padj[i] < 0.05){"2"}
  else if(abs(res$log2FoldChange[i])>1 & abs(res$log2FoldChange[i])<1.5 & res$padj[i] < 0.05){"2.5"}
  else if(abs(res$log2FoldChange[i])>1.5 & abs(res$log2FoldChange[i])<2 & res$padj[i] < 0.05){"3"}
  else if(abs(res$log2FoldChange[i])>2 & res$padj[i] < 0.05){"3.5"}
  else{"1.5"}})
清洗好的res

2. 画中间的plot

fc = res$log2FoldChange
p = -log10(res$padj)  #可以将P矫正换成P,取决于你实验的设计
sizes = as.numeric(res$size)
pdf('test1.pdf')
plot(x= fc,y= p,log='y', # indicating if x or y or both coordinates should be plotted in log scale.
     pch=16,
     xlab=bquote(~Log[2]~'Foldchange'),
     ylab=bquote(~Log[10]~'Padj'),
     cex=sizes,
     col=res$group,
     xlim=range(fc*1.2))  

至此主图的框架已画完,下面是添油加醋,让他变得更好看

### 
## 增加水平线和垂直线
abline(h=-log10(0.05), lty=2, lwd=1)
abline(h=2, lty=3, lwd=1)

abline(v=-1, col="blue", lty=2, lwd=1)
abline(v=1, col="red", lty=2, lwd=1)

## 增加点外面的黑圈
m<-which(p > -log10(0.05) & abs(fc)>1)
points(x=fc[m],y=p[m],pch=1,cex=sizes[m])

## 在主图左右两侧画一个黄色的长方形
#  先要获得橙色的RGB参数
rgb_orange<-col2rgb('orange')/255
# 获得透明度为0.1时的颜色代码
color_rect<-rgb(rgb_orange[,1][1],rgb_orange[,1][2],rgb_orange[,1][3],alpha=0.1)
# 加上长方形
# rect(xleft, ybottom, xright, ytop,XXX)
rect(-3.064454,-log10(0.05),-1,12, col = color_rect)
rect(1,-log10(0.05),2.915735,12, col = color_rect)
dev.off()

注1:在加长方形时,四个角的坐标不太容易获得,可以往下到最后看我的方法

3. 画左右两个小图

先将上调表达和下调表达的挑出来,分别画

res1<-res %>% dplyr::filter(log2FoldChange < (-1) & padj < 0.05)
pdf('test2.pdf',width=5,height=5)
plot(res1$log2FoldChange, -log10(res1$padj), log='y',
     col=res1$group,
     pch=16, 
     ylab=bquote(~-Log[10]~"Padj value"), xlab=bquote(~Log[2]~'Foldchange'),
     cex=as.numeric(res1$size), 
     xlim=c(-2.5,-1),
     ylim=c(1.5,6))
points(res1$log2FoldChange, -log10(res1$padj), pch=1,cex=as.numeric(res1$size))
text(res1$log2FoldChange, -log10(res1$padj), res1[,1],pos=2, #1, 2, 3 and 4, respectively indicate positions below, to the left of, above and to the right of the specified coordinates.
    col='#6d95e6',cex = 1)
rect(-2.7,1,-0.7,6.4, col =  color_rect)
dev.off()

有的基因名重叠了,这里可以将离得比较近的点挑出来,换一个方向加基因名,但是我懒就不写了

同理,右图也以此类推

res2<-res %>% dplyr::filter(log2FoldChange > 1 & padj < 0.05)
pdf('red_heat.pdf',width=5,height=5)
#cols.alpha <- add.alpha(res[,7], alpha=0.6)
plot(res2$log2FoldChange, -log10(res2$padj), log='y',
     col=res2$group,
     pch=16, #实心圆点
     ylab=bquote(~-Log[10]~"Padj value"), xlab=bquote(~Log[2]~'Foldchange'),
     cex=as.numeric(res2$size), # 用小泡泡画不感兴趣的pathway
     xlim=c(1,2.5))
points(res2$log2FoldChange, -log10(res2$padj), pch=1,cex=as.numeric(res2$size))
text(res2$log2FoldChange, -log10(res2$padj), res2[,1],pos=4, #1, 2, 3 and 4, respectively indicate positions below, to the left of, above and to the right of the specified coordinates.
    col='#dd6a64',cex = 1)
gray.alpha <- add.alpha("orange", alpha=0.1)
rect(0.7,1,3,10, col = gray.alpha)
dev.off()

最后用AI将三个图拼接,钢笔工具很简单就能画出中间连接的效果,你会比我画的更好,我懒得做细活,草草画了一下,还能看到毛边。

此文版权归作者所有,未经允许严禁转载。特此警告某某某,某某某,和某某某。
(算了我就是说说,我知道你们还是会未经允许转载的,佛了佛了……东京今天的阳光真好,还有什么可值得计较的呢?快出去走走吧!

注:rect函数中四个角的参数,可用完plot函数后,用par('usr'),就会返回4个角的坐标。但是不是很准,因为plot的坐标不是从整点开始的,就需要配合自己的尝试。另外,在plot函数中,我们添加了log='y'让图形变得更好看,但这样就不会准确的返回坐标值了,所以建议重新跑一下没有log='y'的plot,再par('usr')。说的有点乱,自己试一下就知道啦!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容

  • 千岛之国的印尼,可能很多人对它的了解只是巴厘岛,和以前发生过的排华暴力事件。可是印尼是世界上火山最多的国家,它星罗...
    昊子环球背包阅读 1,838评论 0 3
  • 柔情 文/舒黎 夜是一面镜子 我从梦中惊醒 努力回味你的柔情 一点 一点 谴卷的眼神 无限的包容 邹巴巴的纸币 秋...
    午后黄昏阅读 125评论 0 0
  • 简易解释——什么是“DNS” 校园版: DNS就像是老师的点名册,当老师和学生并不熟悉的时候,老师可能并不能叫出你...
    Cliffjumper阅读 93评论 0 0
  • 一叶而知秋色近。 旁边的梧桐树还依然泛着绿意,可是现在已经是带着金色留白的秋天。很奇怪时间那么快,对于一个不睡觉患...
    绿斜阅读 284评论 0 1
  • 看完我从心里笑了:这人当了爹妈还真特么贱,还有比这更贱的物种吗? 朋友不用骂,肯定有道德婊在跳高跺脚干着你想干的事...
    天长水秋阅读 1,024评论 20 37