通过元数据着色稀疏曲线(素食包)(phyloseq 包)
Coloring Rarefaction curve lines by metadata (vegan package) (phyloseq package)
第一次在这里提问。我无法在其他帖子中找到这个问题的答案(爱 stackexchange,顺便说一句)。
总之...
我正在通过 vegan 包创建一个稀疏曲线,我得到一个非常混乱的图,在图的底部有一个非常粗的黑条,它掩盖了一些低多样性样本线。
理想情况下,我想用我所有的线(169;我可以将其减少到 144)生成一个图,但制作一个复合图,按样本年着色并为每个池塘制作不同类型的线(即:2 个样本年: 2016、2017 和 3 个池塘:1、2、5)。我使用 phyloseq 创建了一个包含我所有数据的对象,然后将我的 OTU 丰度 table 从我的元数据中分离为不同的对象(jt = OTU table 和 sampledata = 元数据)。我当前的代码:
jt <- as.data.frame(t(j)) # transform it to make it compatible with the proceeding commands
rarecurve(jt
, step = 100
, sample = 6000
, main = "Alpha Rarefaction Curve"
, cex = 0.2
, color = sampledata$PondYear)
# A very small subset of the sample metadata
Pond Year
F16.5.d.1.1.R2 5 2016
F17.1.D.6.1.R1 1 2017
F16.1.D15.1.R3 1 2016
F17.2.D00.1.R2 2 2017
enter image description here
这是一个如何使用 ggplot 绘制稀疏曲线的示例。我使用了 bioconductor 提供的 phyloseq 包中的可用数据。
安装phyloseq:
source('http://bioconductor.org/biocLite.R')
biocLite('phyloseq')
library(phyloseq)
需要其他库
library(tidyverse)
library(vegan)
数据:
mothlist <- system.file("extdata", "esophagus.fn.list.gz", package = "phyloseq")
mothgroup <- system.file("extdata", "esophagus.good.groups.gz", package = "phyloseq")
mothtree <- system.file("extdata", "esophagus.tree.gz", package = "phyloseq")
cutoff <- "0.10"
esophman <- import_mothur(mothlist, mothgroup, mothtree, cutoff)
提取OTUtable,转置并转换为数据帧
otu <- otu_table(esophman)
otu <- as.data.frame(t(otu))
sample_names <- rownames(otu)
out <- rarecurve(otu, step = 5, sample = 6000, label = T)
现在你有了一个列表,每个元素对应一个样本:
整理一下列表:
rare <- lapply(out, function(x){
b <- as.data.frame(x)
b <- data.frame(OTU = b[,1], raw.read = rownames(b))
b$raw.read <- as.numeric(gsub("N", "", b$raw.read))
return(b)
})
标签列表
names(rare) <- sample_names
转换为数据框:
rare <- map_dfr(rare, function(x){
z <- data.frame(x)
return(z)
}, .id = "sample")
让我们看看它的样子:
head(rare)
sample OTU raw.read
1 B 1.000000 1
2 B 5.977595 6
3 B 10.919090 11
4 B 15.826125 16
5 B 20.700279 21
6 B 25.543070 26
使用 ggplot2 绘图
ggplot(data = rare)+
geom_line(aes(x = raw.read, y = OTU, color = sample))+
scale_x_continuous(labels = scales::scientific_format())
素食情节:
rarecurve(otu, step = 5, sample = 6000, label = T) #low step size because of low abundance
可以据此多加一列分组和颜色。
这里是一个如何添加另一个分组的例子。让我们假设你有一个 table 的形式:
groupings <- data.frame(sample = c("B", "C", "D"),
location = c("one", "one", "two"), stringsAsFactors = F)
groupings
sample location
1 B one
2 C one
3 D two
其中样本根据另一个特征进行分组。您可以使用 lapply
或 map_dfr
遍历 groupings$sample
并标记 rare$location
.
rare <- map_dfr(groupings$sample, function(x){ #loop over samples
z <- rare[rare$sample == x,] #subset rare according to sample
loc <- groupings$location[groupings$sample == x] #subset groupings according to sample, if more than one grouping repeat for all
z <- data.frame(z, loc) #make a new data frame with the subsets
return(z)
})
head(rare)
sample OTU raw.read loc
1 B 1.000000 1 one
2 B 5.977595 6 one
3 B 10.919090 11 one
4 B 15.826125 16 one
5 B 20.700279 21 one
6 B 25.543070 26 one
让我们根据这个制作一个像样的情节
ggplot(data = rare)+
geom_line(aes(x = raw.read, y = OTU, group = sample, color = loc))+
geom_text(data = rare %>% #here we need coordinates of the labels
group_by(sample) %>% #first group by samples
summarise(max_OTU = max(OTU), #find max OTU
max_raw = max(raw.read)), #find max raw read
aes(x = max_raw, y = max_OTU, label = sample), check_overlap = T, hjust = 0)+
scale_x_continuous(labels = scales::scientific_format())+
theme_bw()
第一次在这里提问。我无法在其他帖子中找到这个问题的答案(爱 stackexchange,顺便说一句)。
总之... 我正在通过 vegan 包创建一个稀疏曲线,我得到一个非常混乱的图,在图的底部有一个非常粗的黑条,它掩盖了一些低多样性样本线。 理想情况下,我想用我所有的线(169;我可以将其减少到 144)生成一个图,但制作一个复合图,按样本年着色并为每个池塘制作不同类型的线(即:2 个样本年: 2016、2017 和 3 个池塘:1、2、5)。我使用 phyloseq 创建了一个包含我所有数据的对象,然后将我的 OTU 丰度 table 从我的元数据中分离为不同的对象(jt = OTU table 和 sampledata = 元数据)。我当前的代码:
jt <- as.data.frame(t(j)) # transform it to make it compatible with the proceeding commands
rarecurve(jt
, step = 100
, sample = 6000
, main = "Alpha Rarefaction Curve"
, cex = 0.2
, color = sampledata$PondYear)
# A very small subset of the sample metadata
Pond Year
F16.5.d.1.1.R2 5 2016
F17.1.D.6.1.R1 1 2017
F16.1.D15.1.R3 1 2016
F17.2.D00.1.R2 2 2017
enter image description here
这是一个如何使用 ggplot 绘制稀疏曲线的示例。我使用了 bioconductor 提供的 phyloseq 包中的可用数据。
安装phyloseq:
source('http://bioconductor.org/biocLite.R')
biocLite('phyloseq')
library(phyloseq)
需要其他库
library(tidyverse)
library(vegan)
数据:
mothlist <- system.file("extdata", "esophagus.fn.list.gz", package = "phyloseq")
mothgroup <- system.file("extdata", "esophagus.good.groups.gz", package = "phyloseq")
mothtree <- system.file("extdata", "esophagus.tree.gz", package = "phyloseq")
cutoff <- "0.10"
esophman <- import_mothur(mothlist, mothgroup, mothtree, cutoff)
提取OTUtable,转置并转换为数据帧
otu <- otu_table(esophman)
otu <- as.data.frame(t(otu))
sample_names <- rownames(otu)
out <- rarecurve(otu, step = 5, sample = 6000, label = T)
现在你有了一个列表,每个元素对应一个样本:
整理一下列表:
rare <- lapply(out, function(x){
b <- as.data.frame(x)
b <- data.frame(OTU = b[,1], raw.read = rownames(b))
b$raw.read <- as.numeric(gsub("N", "", b$raw.read))
return(b)
})
标签列表
names(rare) <- sample_names
转换为数据框:
rare <- map_dfr(rare, function(x){
z <- data.frame(x)
return(z)
}, .id = "sample")
让我们看看它的样子:
head(rare)
sample OTU raw.read
1 B 1.000000 1
2 B 5.977595 6
3 B 10.919090 11
4 B 15.826125 16
5 B 20.700279 21
6 B 25.543070 26
使用 ggplot2 绘图
ggplot(data = rare)+
geom_line(aes(x = raw.read, y = OTU, color = sample))+
scale_x_continuous(labels = scales::scientific_format())
素食情节:
rarecurve(otu, step = 5, sample = 6000, label = T) #low step size because of low abundance
可以据此多加一列分组和颜色。
这里是一个如何添加另一个分组的例子。让我们假设你有一个 table 的形式:
groupings <- data.frame(sample = c("B", "C", "D"),
location = c("one", "one", "two"), stringsAsFactors = F)
groupings
sample location
1 B one
2 C one
3 D two
其中样本根据另一个特征进行分组。您可以使用 lapply
或 map_dfr
遍历 groupings$sample
并标记 rare$location
.
rare <- map_dfr(groupings$sample, function(x){ #loop over samples
z <- rare[rare$sample == x,] #subset rare according to sample
loc <- groupings$location[groupings$sample == x] #subset groupings according to sample, if more than one grouping repeat for all
z <- data.frame(z, loc) #make a new data frame with the subsets
return(z)
})
head(rare)
sample OTU raw.read loc
1 B 1.000000 1 one
2 B 5.977595 6 one
3 B 10.919090 11 one
4 B 15.826125 16 one
5 B 20.700279 21 one
6 B 25.543070 26 one
让我们根据这个制作一个像样的情节
ggplot(data = rare)+
geom_line(aes(x = raw.read, y = OTU, group = sample, color = loc))+
geom_text(data = rare %>% #here we need coordinates of the labels
group_by(sample) %>% #first group by samples
summarise(max_OTU = max(OTU), #find max OTU
max_raw = max(raw.read)), #find max raw read
aes(x = max_raw, y = max_OTU, label = sample), check_overlap = T, hjust = 0)+
scale_x_continuous(labels = scales::scientific_format())+
theme_bw()