#' @title Compare data from the same source but different scale
#' @description Compare data from the same source but different scale
#' @param X1 Matrix with sample col and gene row
#' @param X2 Matrix with sample col and gene row
#' @param names Label of X1 and X2
#' @param width,height Plot parameters
#' @param savePath Plot saved path
#' @importFrom plyr alply
#' @importFrom ggplot2 ggplot geom_point aes stat_smooth labs theme_bw theme
#' element_text element_rect
#' @author Weibin Huang<\email{654751191@@qq.com}>
#' @examples
#' ## PAD genes
#' PAD <- readRDS(system.file("extdata", 'PAD.rds', package = "GSClassifier"))
#' tgene <- as.character(unlist(PAD$geneSet))
#' X1 <- stad_fpkm[tgene,]
#' X2 <- stad_tpm[tgene,]
#'
#' ## Compare FPKM with TPM matrix
#' res <- compareData(X1,X2,
#' names=c('FPKM','TPM'),
#' width = 10,
#' height = 10,
#' savePath = '.')
#' res2 <- compareData(log2(X1+1),log2(X2+1),
#' names=c('log2FPKM','log2TPM'),
#' width = 10,
#' height = 10,
#' savePath = '.')
#' @export
compareData <- function(X1,
X2,
names=c('X1','X2'),
width = 10,
height = 10,
savePath = '.'){
## Data
coGene <- intersect(rownames(X1),rownames(X2))
coSample <- intersect(colnames(X1),colnames(X2))
X1 <- X1[coGene,coSample]
X2 <- X2[coGene,coSample]
## Correlation of expression for every gene
compareOneGene <- function(X1,X2,gene){ # gene='ENSG00000136167'
x1 <- as.numeric(X1[gene,])
x2 <- as.numeric(X2[gene,])
res <- cor.test(x1, x2,
alternative = "two.sided",
method = "spearman",
conf.level = 0.95)
# res2 <- data.frame(
# Cor = res$estimate,
# P.value = res$p.value
# )
size = 30
p <- ggplot(data.frame(x1=x1,x2=x2),aes(x=x1,y=x2)) +
geom_point(alpha = 0.5,size = 11,colour = "#FB8072") +
stat_smooth(formula = y ~ x,method = 'glm') +
labs(x = names[1],
y = names[2],
title = gene) +
theme_bw() +
theme(
plot.title = element_text(size = size,colour = "black",face = "bold",hjust = 0.5),
axis.text = element_text(size = size/15*12,colour = "black",face = "bold"),
axis.title.x = element_text(size = size,colour = "black",face = "bold"),
axis.title.y = element_text(size = size,colour = "black",face = "bold"),
legend.text = element_text(size = size/15*12,colour = "black",face = "bold"),
legend.title = element_text(size = size/15*12,colour = "black",face = "bold"),
legend.position='right',
strip.background = element_rect(fill="white"),
strip.text = element_text(size = size/15*12,colour = "black",face = "bold")
)
# Output
l <- list(
Data = res,
Plot = p
)
return(l)
}
l <- alply(as.matrix(coGene),1,function(x) compareOneGene(X1,X2,x))
names(l) <- coGene
## Merge plot
cairo_pdf(paste0(savePath,'/Plot of compareData_',paste0(names,collapse = '-'),'.pdf'),width = width,height = height,onefile = T)
for(i in 1:length(l)) print(l[[i]]$Plot)
dev.off()
## Output
return(l)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.