1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
| f_image_output <- function(fileName, image, width=1920, height=1080, lc_pdf=T, lc_resolution=72){ if(lc_pdf){ width = width / lc_resolution height = height / lc_resolution pdf(paste(fileName, ".pdf", sep=""), width = width, height = height) }else{ png(paste(fileName, ".png", sep=""), width = width, height = height) } print(image) dev.off() }
library(dplyr) f_cDB_order_sequence <- function(lc_df){ da <- data.frame() df <- subset(lc_df, receptor_a == 'True' & receptor_b == 'False' receptor_a == 'False' & receptor_b == 'True') for(i in 1:length(df$gene_a)){ sub_data <- df[i, ] if(sub_data$receptor_b=='False'){ if(sub_data$receptor_a=='True'){ old_names <- colnames(sub_data) my_list <- strsplit(old_names[-c(1:11)], split="\\") my_character <- paste(sapply(my_list, '[[', 2L), sapply(my_list, '[[', 1L), sep='') new_names <- c(names(sub_data)[1:4], 'gene_b', 'gene_a', 'secreted', 'receptor_b', 'receptor_a', "annotation_strategy", "is_integrin", my_character) sub_data = dplyr::select(sub_data, new_names) # print('Change sequence!!!') names(sub_data) <- old_names da = rbind(da, sub_data) } }else{ da = rbind(da, sub_data) } } return(da) }
f_cDB_mergePandM <- function(means_order, pvals_order){ means_sub <- means_order[, c('interacting_pair', colnames(means_order)[-c(1:11)])] pvals_sub <- pvals_order[, c('interacting_pair', colnames(means_order)[-c(1:11)])] means_gather <- tidyr::gather(means_sub, celltype, mean_expression, names(means_sub)[-1]) pvals_gather <- tidyr::gather(pvals_sub, celltype, pval, names(pvals_sub)[-1]) mean_pval <- dplyr::left_join(means_gather, pvals_gather, by = c('interacting_pair', 'celltype')) mean_pval }
f_readcellphoneDB <- function(lc_dir){ res = list() res$pvals <- f_cDB_order_sequence(read.delim(file.path(lc_dir, "out","pvalues.txt"), check.names = FALSE)) res$means <- f_cDB_order_sequence(read.delim(file.path(lc_dir, "out", "means.txt"), check.names = FALSE)) res$s_means <- read.delim(file.path(lc_dir, "out", "significant_means.txt"), check.names = FALSE) res$m_p <- f_cDB_mergePandM(res$means, res$pvals) lc_tp <- res$m_p %>% dplyr::select(interacting_pair, celltype, pval) %>% tidyr::spread(key=celltype, value=pval) lc_sig_pairs <- lc_tp[which(rowSums(lc_tp<=0.05)!=0), ] res$s_m_p <- subset(res$m_p, interacting_pair %in% lc_sig_pairs$interacting_pair) res }
f_cDB_dotplot <- function(lc_m_p){ lc_m_p %>% ggplot(aes(x=interacting_pair, y=celltype)) + # geom_point(aes(color=log2(mean_expression), size=pval)) + # scale_size(trans = 'reverse') + geom_point(aes(color=log2(mean_expression), size=-log10(pval+1*10^-3)) ) + guides(colour = guide_colourbar(order = 1),size = guide_legend(order = 2)) + labs(x='', y='') + scale_color_gradientn(name='Expression level \n(log2 mean expression \nmolecule1, molecule2)', colours = terrain.colors(100)) + # scale_color_gradient2('Expression level \n(log2 mean expression \nmolecule1, molecule2)', low = 'blue', mid = 'yellow', high = 'red') + theme(axis.text.x= element_text(angle=45, hjust=1)) + # coord_flip() + theme( panel.border = element_rect(color = 'black', fill = NA), panel.grid.major.x = element_blank(), panel.grid.major.y = element_blank(), panel.grid.minor.x = element_blank(), panel.grid.minor.y = element_blank(), panel.background = element_blank(), axis.title.x = element_blank(), axis.title.y = element_blank(), axis.ticks = element_blank() # plot.title = element_text(hjust = 0.5), # legend.position = 'bottom' # guides(fill = guide_legend(label.position = "bottom")) # legend.position = "bottom" # axis.text.y.right = element_text(angle=270, hjust=0.5) ) + theme(legend.key.size = unit(0.4, 'cm'), #change legend key size # legend.key.height = unit(1, 'cm'), #change legend key height # legend.key.width = unit(1, 'cm'), #change legend key width legend.title = element_text(size=9), #change legend title font size legend.text = element_text(size=8)) #change legend text font size }
br_d <- f_readcellphoneDB('Neuron_br') tp_img <- f_cDB_dotplot(subset(br_d $s_m_p, pval<0.05)) f_image_output('Neuron_br',tp_img, width = 1080,height = 1080)
|