终于你也可以做这张图了

其实最近无论是实验还是写作任务都很繁重,夜深人静的时候,总是在想明天会好一些吗?可能会的吧。

前一段时间,有个图形被大家讨论过很多次,也出现了许多的绘制方式。宏基因组也曾转载过一篇文章,讨论了这种图形的实现方式。Science组合图表解读

就是下面这张图片

许多人对这种图形进行了探索

R语言之照猫画虎1

R语言之照猫画虎2

Science组合图表解读

总的来说这些推送对这张图形的实现由两种思路。1,使用基础绘图包,2,使用ggplot。似乎基础包更容易一些,使用corplot来绘制相关图形,然后添加其他内容,第三篇推送还做了一些图形和含义的解读。

为什么我还要自己探索呢?有以下几个原因:

  1. 我不愿意使用基础包实现这种图形的绘制,而以上推送就ggplot的实现方式距离实际运用还有一段距离。需要简化出图。

  2. 这张图用于微生物生态方面很适用,结合mantel检验和相关分析的部分我用得到。

很久没和大家见面了,答应大家的事情很多,完成的却总也不够。今天我把这幅图带给大家。虽然在之前有预告,但是却没有告诉大家数据输入格式,今天你们将看到封装好的函数,我将提供示例数据,并且可以一键出图,让这种组合图形也难不住我们努力奋进的人。

下面便是

两份数据格式很简单,只要整理成这个形式即可一键出图

env.st = read.csv("./env.st.csv",row.names = 1)
env.st

report = read.csv("./report.csv",row.names = 1)
report

运行下面一条代码即可

p = plot_mantel_cor(env = env.st,report = report,title = "好久不见-我的朋友" )
p

就是下面这个函数

其实有很多参数我没有放进去,比如组合图形的相对位置,标签位置,颜色设置,线条粗细,额!是不是太多参数了,反正都是ggplot出图,大家自己加上吧,如果有朋友完善了这个函数,记得发给我哦。


plot_mantel_cor = function(env = env.st,report = report,title = "16S_microbiology"){
library(ggcorrplot)
library(igraph)
library(psych)

occor = corr.test(env.st,use="pairwise",method="spearman",adjust="fdr",alpha=.05)
occor.r = occor$r # 取相关性矩阵R值

occor.p = occor$p # 取相关性矩阵p值
occor.r[occor.p>0.05] = 0
# write.csv(occor.r,"./occor.r.csv",quote = F)
library(reshape2)
occor.r2 = occor.r[lower.tri(occor.r, diag = TRUE)]
length(colnames(occor.r))

### 构造环境变量三角矩阵图
## dd:构建三交矩阵横坐标
cc = rep(length(colnames(occor.r)),(length(colnames(occor.r))))
for (i in 1:(length(colnames(occor.r))-1)) {
ee = rep(length(colnames(occor.r))-i,(length(colnames(occor.r))-i))
dd = c(cc,ee)

cc = dd
}
dd = (length(colnames(occor.r))+1) - dd
##ww:构建三角矩阵纵坐标
gg = rep(length(colnames(occor.r)):1)
for (i in 1:(length(colnames(occor.r))-1)) {
ee = c((length(colnames(occor.r))-i):1)
ww = c(gg,ee)

gg = ww
}

##构造变量对应关系
wwt =data.frame(x = dd,y = ww)
##提取相关值大小,这是下三角矩阵转化
# xa = melt(occor.r)
wwt$mantelR = occor.r2
wwt

### 下面添加群落和环境因子的相关结果
##构造每个环境因子的坐标
x = c(1:(length(colnames(occor.r))) )
y = c((length(colnames(occor.r))+1) :2)
data2 = data.frame(x = x,y = y)
data2
###添加线的粗细和颜色映射
data2$count = report$R
data2$count = as.character(data2$count)
data2$count = as.numeric(data2$count)
data2

as = rep("a",length(data2$count))
for (i in 1:length(data2$count)) {
if (data2$count[i] > 0) {
as[i] = "+"
}

if (data2$count[i] < 0) {
as[i] = "-"
}
if (data2$count[i] == 0) {
as[i] = "-"
}
}
as

data2$group = as
data2$label = colnames(env.st)
wwt

data2$count1 = data2$count^2*500
# data2$count1 = c(1:length(data2$count))
##这和图形整体绘制

###geom_curve添加size参数如果在aes内部的话默认线非常宽,但是size放到sea外就不会这样,这里我选择放到外面
p = ggplot() +
geom_tile(aes(x = x, y = y),wwt,fill=NA,color='gray',size=0.5)+
geom_point(aes(x = x, y = y,size=mantelR,fill=mantelR),wwt, shape=22,color='white')+
scale_size(range = c(1, 8))+
scale_fill_distiller(palette="RdYlBu")+
geom_curve(aes(x = max(wwt$x)*3/4, y = max(wwt$y)*3/4, xend = x, yend = y,group = group,color = group),curvature = 0.2,data2,size = data2$count1) +
geom_point(aes(x = x, y = y),pch = 21,size =4,data2,color = "black",fill = "#FFF5EB")+
geom_point(aes(x = max(wwt$x)*3/4, y = max(wwt$y)*3/4),pch = 21,size = 6,color = "black",fill = "#FEE6CE")

p

### 添加环境因子添加标签
p = p + geom_text(aes(x = x, y = 0,label= colnames(env.st)),size=4,data2) +
geom_text(aes(x = 0, y = y-1,label= colnames(env.st)),size=4,data2)
p = p + geom_text(aes(x = x+0.5, y = y+0.5,label=data2$label),size=4,data2)
##添加群落矩阵标签
wwt

# max(wwt$x)*3/4
# max(wwt$y)*3/4

p = p +
geom_text(aes(x = max(wwt$x)*3/4, y = max(wwt$y)*3/4,label= title),size = 6)
p

### 修改主题
p = p +theme_void()#横纵坐标群去掉

p

}

(0)

相关推荐

  • 周集中团队Nature子刊中网络图布局的R语言可视化复现

    Network layout in NCC style 2021年初,周集中团队在Nature Climate Change杂志上发表了一篇气候变暖对微生物网络复杂性与稳定性影响的文章见下文 Natu ...

  • 数据处理基础—ggplot2了解一下

    书籍翻译 好的书籍是人类进步的阶梯,但有些人却找不到优秀的阶梯,为此我们开设了书籍翻译这个栏目,作为你学习之路的指路明灯:分享国内外优秀书籍,弘扬分享精神,做一个知识的传播者. 希望大家能有所收获! ...

  • RDA_环境因子_群落结构_统计检验_可视化

    RDA环境因子群落结构统计检验可视化 环境因子的筛选及数据的转化方面请参阅宏基因组公众号之前的推文,本文主要侧重统计分析与可视化 看到师兄文章里的图自己可能用到,想复现一下,于是就尝试了一下,顺便写个 ...

  • R绘图:唱一半的歌,画一半的图 gghalves

    R绘图往期回顾: R绘图:gggibbous,基于ggplot2的Moon charts R绘图:ggeconodist,基于ggplot2的另类箱图 R语言学习系列之"多变的热图" ...

  • ggplot2作图小例子

    ggplot2绘制几个常用图形:直方图,密度曲线图,散点图,箱线图,小提琴图,折线图(重点在小提琴图) ggplot2直方图 library(ggplot2) ggplot(data = diamon ...

  • 使用Python对数据进行AES加密和解密

    随着网络上爬虫的横行和猖獗,各大网站为了最大限度地限制自家数据被采集,纷纷加入了各种反爬手段,比如: 生成浏览器UA指纹识别: 用各种验证方式(短信.滑块.点选汉字.点击)进行识别: -- 这一类的反 ...

  • 1天做100张图?无需PPT和PS,用这14个网站,在线就能做!

    作者:小叮 编辑:灿灿 大家好,我是一分钟不学习就坐卧不安,一分钟不作图就胸闷气短的@小叮~ 前天我们团队正在三峡游山玩水,刷微博突然看到热搜:#一天做 100 张设计图# 难道有什么新的神器横空出世 ...

  • 【同人分享】画美少女战士活动终于告一段落,最后一张图可以说是很点题了

    但上述项活动在国内社交平台上更多是处于一种转载看戏的状况,相较之下后来的另一项活动则演变成了国内外全民参与的盛况,那就是以画师自己的画风重绘<美少女战士>的月野兔. 上图的第一张就是这次月 ...

  • 你做对了吗?一张图读懂俯卧撑

    许多健身动作看似简单,实际上却是"上手易,做对难".我们为此开设的动作库专栏,为刚开始运动的新人,一次讲解一个健身动作,避开误区,助你科学健身. 听说有一个动作 是男人间力量大比拼 ...

  • 虽然不做纯生信,但是只利用这张图就可以发SCI

    平时看人家做预测模型挺挺苦的,要做什么c指数,什么校准图,什么ROC,什么内部验证,什么外部验证.但是今天介绍的文章,人家只有一张列线图,其他什么都没有,全文只有这样的一张图: 这篇文章发表在Geri ...

  • 一张图生成3D人脸模型,可直接做带皱纹面部动画?!

    原创 cc CG世界 1周前 前几天我们介绍了几款捏超写实人物角色的软件.有的同学说,啥时候能用一张图片生成,那才叫厉害!哎?今天它来了!! 其实之前有介绍过单张图片重建三维模型的方法,但是存在一些局 ...

  • 如何培养优秀的孩子, 9张图告诉你怎么做

    谁都不是天生的"完美父母",但教育孩子的路上,必定伴随不断地学习.往前迈出的每一小步,都是孩子走向优秀的一大步. 教育,像一场闯关游戏.穿越一个又一个关卡,每一关都为难,每一关又都 ...

  • 走遍300个村庄终于拍到这张图,你肯定没见过!

    好日子 宋祖英 - 好日子 下面这些画面 看了就开心! 丰收景象,绿意盎然,看了让人赏心悦目,发给朋友们养养眼,开阔放松一下心怀! (来源网络,若有侵权,请联系后台删除!)

  • 终于有人把成交量的精髓说透彻了!九张图教...

    终于有人把成交量的精髓说透彻了!九张图教你看透成交量,零基础小白也能看懂.   在股市里成交量是较重要的一个元素,它是主力实实在在的出入,一天的K线可能会有骗线行为,而一天所有的走势都体现在量能上,这 ...