本文是学习R语言绘图中遇到的部分包安装记录以及扩展,解决方法就是使用最新版R或者次新版R,某些包安装出现问题可以去官网看看安装要求。本文涉及到docker简单使用、linux(Ubuntu安装R)、R镜像设置、bioconductor镜像设置、R包自动检测安装、github内容快速下载。
经过一番尝试,成功配置环境后,决定在docker里重新来一遍,方面做记录,结果非常顺利,没有出现前面遇到的问题。
docker
docker安装和配置镜像参考 docker
docker简单使用
docker search ubuntu
docker pull ubuntu # 拉取最新版20.04
docker image ls
docker run -it --rm ubuntu # 运行Ubuntu,rm表示退出即刻删除,也即是还原
docker中重头配置环境
docker run -it --rm ubuntu
apt update
apt install r-base -y
image.png
# R镜像设置可以写入配置文件,就不用每次都配置镜像了
options("repos" = c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))
if (!requireNamespace("stringr", quietly = TRUE))
install.packages("stringr")
vs <- version$version.string
if(stringr::str_split(vs, " ")[[1]][3] < "3.6")
cat("您的R版本为:",vs,"\n要求R版本大于等于3.5,建议3.6以上,3.5不保证所需包都能安装\n")
if (!requireNamespace("BiocManager", quietly = TRUE))
install.packages("BiocManager")
options(BioC_mirror="https://mirrors.tuna.tsinghua.edu.cn/bioconductor")
BiocManager::install("ggtree")
packages <- c("ggplot2", "RColorBrewer", "statnet", "circlize")
if (!requireNamespace(packages, quietly = TRUE))
install.packages(packages)
实际运行R代码作图部分没有使用docker,只要包成功安装并且可以加载就不会有问题了。本次docker实验未发现需要手动安装的依赖,一遍成功,说明ubuntu 20.04还是比较好的,其他Ubuntu版本可能配置环境就要复杂一点了,起码R版本低于3.6,还可能得安装依赖,ggtree官网说Ubuntu16.04要安装依赖,Ubuntu 18.04也需要安装依赖,centos7的R为3.6.0,应该也需要安装依赖。
sudo apt-get install libfftw3-3 libfftw3-dev libtiff5-dev
sudo yum install libtiff-devel fftw-devel
windows下简单,下载新版的R,配置R环境即可。
之所以建议R版本3.6以上是因为statnet包要求R版本大于3.5,而我的Windows安装的R为3.5.3不能成功安装statnet包,提示nlme包旧,更新了nlme包也不行,一怒之下遂安装3.6.2,然后是安装需要的包,然后就没问题了,R4.0包都出来了,就不要再留恋低版本的R了,经测R4.0安装以上环境没问题,测试环境为滚动发行版Arch。
R语言作图
R语言作图部分来自宏基因组公众号,拿来学习的,代码、数据以及详细内容请阅读GCB:农田土壤丰富真菌比稀有真菌适应更广(一作解读+主图重现),文末给出的有链接。
下面的代码没有做改动,本文主要是记录R语言环境配置的坑,不同系统、不同版本可能出现的问题,建议使用最新版。
library(ggtree)
library(ggplot2)
library(RColorBrewer)
#-指定九种颜色
col<-brewer.pal(9, "Set1")
进化树 + 热图
#--微生物组三个文件读取:注释文件,进化树,和otu丰度文件
tax<-read.csv("hong_otuname_abd.csv",row.names=1)
aa<-read.tree("hong_tre_abd.tre")
#--这里经过了处理,将OTU存在信息通过分组合并 ,并将存在与否使用1或者-1表示
heat1<-read.csv("hong_heat1_abd.csv",row.names=1)
heat<-ifelse(heat1>0,"Pos","Neg")
heat[heat1==0]<-"NA"
#--按照样本聚类
h<-hclust(dist(t(heat1)))
# 聚类顺序重排矩阵
heat<-heat[,h$order]
#为进化树匹配物种分类信息
dd<-data.frame(id=aa$tip.label,tax[aa$tip.label,])
# 对于属水平未注释的结果我们用OTU名称替代
dd$aa<-ifelse(dd$genus=="",rownames(dd),as.vector(dd$genus))
#-设置进化树可视化分组选项,按照门水平填充颜色
groupInfo1 <- split(aa$tip.label, as.vector(tax[aa$tip.label,2]))
aa<- groupOTU(aa, groupInfo1)
p<-ggtree(aa,aes(color=group),branch.length='none')
p
image.png
#--许多人不知道如何配置dd文件,诀窍就是将数据框第一列设置为进化树叶节点名称,并以id命名。
p<-p%<+%dd+geom_tippoint(size=3)+geom_tiplab(aes(label=aa),size=2,color="black")
gheatmap(p,heat,offset=6, width=3, font.size=3, colnames_angle=90,colnames = T)+
scale_fill_manual(values=c("white","#fdbb2d","#1E9600"))+
scale_color_manual(values=c(col[c(3:5,8)]))
# %<+% {ggtree}add annotation data to a tree
image.png
稀有物种按照以上重来一次
#####Rare#####
#--按照以上操作将稀有物种树重新来一遍
tax<-read.csv("hong_otuname_ra.csv",row.names=1)
aa<-read.tree("hong_tre_ra.tre")
heat1<-read.csv("hong_heat1_ra.csv",row.names=1)
heat<-ifelse(heat1>0,"Pos","Neg")
heat[heat1==0]<-"NA"
heat<-heat[,h$order]
dd<-data.frame(id=aa$tip.label,tax[aa$tip.label,])
dd$aa<-ifelse(dd$genus=="",rownames(dd),as.vector(dd$genus))
groupInfo1 <- split(aa$tip.label, as.vector(tax[aa$tip.label,2]))
aa<- groupOTU(aa, groupInfo1)
p<-ggtree(aa,aes(color=group),branch.length='none')
p<-p%<+%dd+geom_tippoint(size=3)+geom_tiplab(aes(label=aa),size=2)
gheatmap(p,heat,offset=6, width=3, font.size=3, colnames_angle=90,colnames = T)+
scale_fill_manual(values=c("white","#fdbb2d","#1E9600"))+
scale_color_manual(values=c(col[c(3,5,7,8)]))
image.png
和弦图 绘制
############circlize##############
library(statnet)
library(circlize)
#--设定样本和物种颜色
col1<-brewer.pal(11, "RdYlBu")[c(2,10)]
col2<-c(brewer.pal(8,"Set1")[c(3,4,8,5,7)],"grey")
aa<-as.matrix(read.csv("hong_phy.csv",row.names=1))
circos.clear()
grid.col = NULL
grid.col[rownames(aa)] = col2[nrow(aa):1]
grid.col[colnames(aa)] = col1
##--设置不同区块间隔
circos.par(gap.degree = c(rep(2, nrow(aa)-1), 10, rep(2, ncol(aa)-1), 10),start.degree = 0)
?chordDiagram
chordDiagram(aa,directional = F,diffHeight = 0.06,grid.col = grid.col, transparency = 0.5)
legend("right",pch=20,legend=rownames(aa)[nrow(aa):1],col=grid.col[rownames(aa)[nrow(aa):1]],bty="n",cex=1,pt.cex=3,border="black")
image.png
circos.clear()
grid.col = NULL
grid.col[rownames(aa)] = col2[nrow(aa):1]
grid.col[colnames(aa)] = col1
##--设置不同区块间隔
circos.par(gap.degree = c(rep(2, nrow(aa)-1), 10, rep(2, ncol(aa)-1), 10),start.degree = 0)
chordDiagram(aa,directional = F,diffHeight = 0.06,grid.col = grid.col, transparency = 0.5, annotationTrack =c("grid", "axis"),
preAllocateTracks = 2
)
circos.track(track.index = 1, panel.fun = function(x, y) {
circos.text(CELL_META$xcenter, CELL_META$ylim[1], CELL_META$sector.index,
facing = "clockwise", niceFacing = TRUE, adj = c(0, 0.5))
}, bg.border = NA) # here set bg.border to NA is important
image.png
最后说一下在别人给出github链接的情况下如何高速下载。
我们可以将给出的github链接看作四部分,以https://github.com/YuLab-SMU/ggtree/wiki/ggtree-installation为例,其中https://github.com为官网;YuLab-SMU为用户名;ggtree为仓库名;剩下的为仓库里的东西。去掉最后一部分,在仓库名后面加“.git”,例如:https://github.com/YuLab-SMU/ggtree.git。打开https://gitee.com(码云),注册并登录,点击右上角“+”选择从github导入仓库,从URL导入,粘贴https://github.com/YuLab-SMU/ggtree.git,其他不变即可。
image.png
image.png
导入成功之后就可以选择克隆或下载了,非常快。
image.png
选择克隆的话需要安装客户端,Windows可以选择git for windows客户端,优点是以后作者更新了,可以快速拉取更新,而不必下载整个仓库。
最后的最后推荐一下简书网页版编辑器,很简洁,插入图片很方便(不论是网络图片、本地图片,复制到内存的图片,都可以),可以作为图床使用,某云笔记上传图片还得VIP。不过简书APP就算了,强烈不推荐,广告太多。
参考链接:
https://vuepress.mirror.docker-practice.com/install/
https://bioconductor.org/install/
https://github.com/YuLab-SMU/ggtree/wiki/ggtree-installation
https://mp.weixin.qq.com/s/x8n5dMpk423u5xtS4qjleA
网友评论