Momocs:用R进行表型变化分析

Momocs是一个使用R进行表型变化的软件包,旨在从形状中提取定量变量。下面就来看看Momocs是如何操作的:


操作步骤


首先,把要处理的图片准备好

Momocs:用R进行表型变化分析

将图像颜色降为8位

Momocs:用R进行表型变化分析


然后调整threshold

Momocs:用R进行表型变化分析


拖动使得红色与要测量的形状符合

Momocs:用R进行表型变化分析

Momocs:用R进行表型变化分析

形状提取好了

Momocs:用R进行表型变化分析

加入Erode

Momocs:用R进行表型变化分析

加Dilate

Momocs:用R进行表型变化分析

加入Gaussian Blur

Momocs:用R进行表型变化分析


设定sigma值

Momocs:用R进行表型变化分析

转换好了

Momocs:用R进行表型变化分析

#保存为JPG格式

Momocs:用R进行表型变化分析


#再保存为text image格式

Momocs:用R进行表型变化分析

install.packages("devtools")

library(devtools)

devtools::install_github("MomX/Momocs")

library(Momocs)

#获取文件列表

lf <- list.files(full.names=TRUE, pattern = "jpg")

#读取jpg文件

coo <- import_jpg(lf)


#编辑标签

Momocs:用R进行表型变化分析

#导入标签

label<-read.table("label.txt",head=T)


#把图像与标签合并

cooo<-Out(coo, fac = label, ldk = list())


#只画第一张图

coo[1] %>% paper %>% draw_outline

Momocs:用R进行表型变化分析

#画所有的图

coo %>% paper %>% draw_curve

Momocs:用R进行表型变化分析


#改为透明背景

coo %>% paper_chess %>% draw_outline -> x

x

Momocs:用R进行表型变化分析


#载入不同背景

apropos("paper")


#加颜色

paper(cooo) %>%

draw_outlines(factor(rep(1:2, 1)), bor=col_qual) %>%

draw_centroid(~type, pch=c(1, 3))


Momocs:用R进行表型变化分析


#画出单个形状

shp <- coo[1]

coo_plot(shp)


Momocs:用R进行表型变化分析


#填充颜色


coo_plot(shp, col="grey80", border=NA, centroid=FALSE, main="Meow")



Momocs:用R进行表型变化分析


#描点


coo_plot(coo_sample(shp, 32), points=TRUE, pch=20, main="64-pts Meow")



Momocs:用R进行表型变化分析


#平滑


shp %>% coo_smooth(5) %>% coo_sample(64) %>% coo_scale() %>% coo_plot()



Momocs:用R进行表型变化分析


#坐标轴转换


cooo %>%

coo_center %>% coo_scale %>%

coo_alignxax() %>% coo_slidedirection("up") %T>%

print() %>% stack()


Momocs:用R进行表型变化分析


#添加颜色


cooo %>% paper_grid %>%

draw_outline(~type, bor=col_qual) %>%

draw_axes %>% draw_centroid %>% draw_firstpoint


Momocs:用R进行表型变化分析


#填充颜色


data(cooo)

cooo

panel(cooo, fac="type", names=TRUE)


Momocs:用R进行表型变化分析


#椭圆分析


coo_oscillo(cooo[1], "efourier")


Momocs:用R进行表型变化分析


#托勒密分析


Ptolemy(cooo[1])



Momocs:用R进行表型变化分析

#直方图


bot.f <- efourier(cooo, nb.h=10)

bot.f

hist(bot.f, drop=0)



Momocs:用R进行表型变化分析


#箱线图


boxplot(bot.f, drop=1)



Momocs:用R进行表型变化分析


#主成分分析


bot.p <- PCA(bot.f)

class(bot.p) # a PCA object, let's plot it

plot(bot.p)



Momocs:用R进行表型变化分析


#填充颜色


panel(cooo, fac="type", names="type")



Momocs:用R进行表型变化分析


#主成分分析


bot.p <- PCA(bot.f)

plot(bot.p)

plot(bot.p, 1, chull=TRUE, pos.shp = "full_axes", abbreviate.labelsgroups = TRUE, points=FALSE, labelspoints = TRUE)



Momocs:用R进行表型变化分析


#主成分分析比重


scree(bot.p)

scree_plot(bot.p)



Momocs:用R进行表型变化分析

boxplot(bot.p, 1)

Momocs:用R进行表型变化分析

PCcontrib(bot.p)

Momocs:用R进行表型变化分析


下面,开始一个项目的分析


#清空R中数据

rm(list = ls())


#加载包

require(Momocs)


#规定轮廓的配位数,拟南芥一般为400-1000

pnt_num <- 500


#导入信息表格,信息表格如下

files <- read.csv("er_BinaryImageFileList.csv")

Momocs:用R进行表型变化分析


#读取轮廓信息,点为255,空白为0

dataNames.txt <- files$txt.files


#导入黑白图像

dataNames.jpg <- files$jpg.files


#得到图片数字

fn <- dim(files)[1]


#创建新的空白项目

dataAll <- list(0)


#导入图片

for (i in 1:fn) {

in_f <- as.character(dataNames.txt[i]) #文件名

dat.imgj <- read.delim(in_f) # 用imageJ生成的txt

dat.imgj <- which(dat.imgj < 127, arr.ind = T) #从txt中得到轮廓坐标

image.ori <- import_jpg1(as.character(dataNames.jpg[i])) #导入图片

cimage <- Out(image.ori) #转换为Coo项目

files $Area.pixels[i] <- coo_area(cimage) #计算面积,填充到$Area.pixels

image1 <- coo_sample(cimage[1], pnt_num) #重新定义轮廓点

image1 <- as.data.frame(image1)

pet.pos <- min(image1[,2]) #得到叶柄切线坐标

image.coo <- image1[image1$V2 > pet.pos + 1, ] #删除叶柄切线处的点

#开始对称转化

lm2 <- lm(dat.imgj[,1] ~ 1 + dat.imgj[,2] + I(dat.imgj[,2]^2)) #将转角折线转化为中心曲线

k1 <- as.numeric(lm2$coefficients[1])

k2 <- as.numeric(lm2$coefficients[2])

k3 <- as.numeric(lm2$coefficients[3])

dat.corr.x <- image.coo[,2] - min(image.coo[,2]) #叶片纵轴的值

dat.corr.y <- k1 + k2 * image.coo[,2] + k3 * image.coo[,2]^2 - image.coo[,1] #转化为对称的形状

datXY <- as.data.frame(cbind(dat.corr.x, dat.corr.y))

dataAll[[i]] <- datXY

}


#开始画图


names(dataAll) <- dataNames.txt #将样品名赋予坐标数据

plot(x = dataAll[[1]][,1], y = abs(dataAll[[1]][,2]), type="l")

for (i in 2:fn) {

points(x = dataAll[[i]][,1], y = abs(dataAll[[i]][,2]), col="gray", type="l")

}

size <- sqrt(files $Area.pixels)

dataAllCorr <- list(0)

for (i in 1:fn) {

dataAllCorr[[i]] <- dataAll[[i]]/size[i]

}

Momocs:用R进行表型变化分析


#画为对称和统一大小的结果


plot(x = dataAllCorr[[1]][,1], y = abs(dataAllCorr[[1]][,2]), xlim= c(0, 1.4), type="l")

for (i in 2:fn) {

points(x = dataAllCorr[[i]][,1], y = abs(dataAllCorr[[i]][,2]), col="gray", type="l")

}



Momocs:用R进行表型变化分析


#将轮廓分为上层与下层


erUD <- list(0)

for (i in 1:fn) {

j <- 2*i - 1

k <- 2*i

erUD[[j]] <- dataAllCorr[[i]][dataAllCorr[[i]]$dat.corr.y > 0,]

erUD[[k]] <- dataAllCorr[[i]][dataAllCorr[[i]]$dat.corr.y < 0,]

}

plot(x = erUD[[1]]$ dat.corr.x, y = abs(erUD[[1]]$ dat.corr.y), col="blue", type= "l", xlim = c(0, 1.4), main="Corrected by Leaf Area (er 001-014)")

for (i in 1:length(erUD) ) {

points(x = erUD[[i]]$ dat.corr.x, y = abs(erUD[[i]]$ dat.corr.y), col="blue", type= "l")

}


Momocs:用R进行表型变化分析


一步代码:


rm(list = ls())

require(Momocs)

pnt_num <- 500

files <- read.csv("er_BinaryImageFileList.csv")

dataNames.txt <- files$txt.files

dataNames.jpg <- files$jpg.files

fn <- dim(files)[1]

dataAll <- list(0)

for (i in 1:fn) {

in_f <- as.character(dataNames.txt[i])

dat.imgj <- read.delim(in_f)

dat.imgj <- which(dat.imgj < 127, arr.ind = T)

image.ori <- import_jpg1(as.character(dataNames.jpg[i]))

cimage <- Out(image.ori)

files $Area.pixels[i] <- coo_area(cimage)

image1 <- coo_sample(cimage[1], pnt_num)

image1 <- as.data.frame(image1)

pet.pos <- min(image1[,2])

image.coo <- image1[image1$V2 > pet.pos + 1, ]

lm2 <- lm(dat.imgj[,1] ~ 1 + dat.imgj[,2] + I(dat.imgj[,2]^2))

k1 <- as.numeric(lm2$coefficients[1])

k2 <- as.numeric(lm2$coefficients[2])

k3 <- as.numeric(lm2$coefficients[3])

dat.corr.x <- image.coo[,2] - min(image.coo[,2])

dat.corr.y <- k1 + k2 * image.coo[,2] + k3 * image.coo[,2]^2 - image.coo[,1]

datXY <- as.data.frame(cbind(dat.corr.x, dat.corr.y))

dataAll[[i]] <- datXY

}

names(dataAll) <- dataNames.txt

plot(x = dataAll[[1]][,1], y = abs(dataAll[[1]][,2]), type="l")

for (i in 2:fn) {

points(x = dataAll[[i]][,1], y = abs(dataAll[[i]][,2]), col="gray", type="l")

}

size <- sqrt(files $Area.pixels)

dataAllCorr <- list(0)

for (i in 1:fn) {

dataAllCorr[[i]] <- dataAll[[i]]/size[i]

}

plot(x = dataAllCorr[[1]][,1], y = abs(dataAllCorr[[1]][,2]), xlim= c(0, 1.4), type="l")

for (i in 2:fn) {

points(x = dataAllCorr[[i]][,1], y = abs(dataAllCorr[[i]][,2]), col="gray", type="l")

}

erUD <- list(0)

for (i in 1:fn) {

j <- 2*i - 1

k <- 2*i

erUD[[j]] <- dataAllCorr[[i]][dataAllCorr[[i]]$dat.corr.y > 0,]

erUD[[k]] <- dataAllCorr[[i]][dataAllCorr[[i]]$dat.corr.y < 0,]

}

plot(x = erUD[[1]]$ dat.corr.x, y = abs(erUD[[1]]$ dat.corr.y), col="blue", type= "l", xlim = c(0, 1.4), main="Corrected by Leaf Area (er 001-014)")

for (i in 1:length(erUD) ) {

points(x = erUD[[i]]$ dat.corr.x, y = abs(erUD[[i]]$ dat.corr.y), col="blue", type= "l")

}



以上就是使用Momocs的操作


Momocs:用R进行表型变化分析

想知道转录组测得怎么样?快来RSeQC一下

Momocs:用R进行表型变化分析

用guidance检测序列比对准确率

Momocs:用R进行表型变化分析

生物软件,会用这个就够了!

Momocs:用R进行表型变化分析

快速检索英文文献?Web of knowledge了解一下

Momocs:用R进行表型变化分析

用Evolview美化系统发育树,简单又高级

Momocs:用R进行表型变化分析

使用Imaris对激光共聚焦照片进行体积测量及共定位分析

Momocs:用R进行表型变化分析

关注科研日精进Get更多科研小工具


展开阅读全文

页面更新:2024-05-11

标签:表型   拟南芥   叶柄   切线   坐标   对称   轮廓   形状   测量   表格   成分   颜色   项目   图片   信息

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top