suppressMessages({ library(ggraph) library(igraph) library(viridis) library(ggplot2) library(reshape2) library(wesanderson) }) argv <- arg_parser(description = '绘制PPI连接图') argv <- add_argument(argv, '--ppi',help = '*_ppi.xls') argv <- add_argument(argv,"--prefix", help="the prefix of outfile") argv <- parse_args(argv) ppi_file <- argv$ppi prefix <- argv$prefix ppi <- read.table(ppi_file, sep = '\t', header = T) connect <- dplyr::select(ppi,node1_name, node2_name)%>% mutate(value=1) colnames(connect)[1:2] <- c('from', 'to') c( as.character(connect$from), as.character(connect$to)) %>% as.tibble() %>% group_by(value) %>% summarize(n=n()) -> vertices colnames(vertices) <- c("name", "n") mygraph <- graph_from_data_frame( connect, vertices = vertices, directed = FALSE ) com <- walktrap.community(mygraph) vertices <- vertices %>% mutate( group = com$membership) %>% mutate(group=as.numeric(factor(group, levels=sort(summary (as.factor(group)),index.return=TRUE,decreasing = T)$ix, order=TRUE))) vertices <- dplyr::filter(vertices,group<10) %>% arrange(group,desc(n)) %>% mutate(name=factor(name, name)) connect <- connect %>% dplyr::filter(from %in% vertices$name) %>% dplyr::filter(to %in% vertices$name)%>% left_join(vertices,by=c('from'='name')) mygraph <- graph_from_data_frame( connect, vertices = vertices, directed = FALSE ) mycolor <- wes_palette("Darjeeling1", max(vertices$group), type = "continuous") mycolor <- sample(mycolor, length(mycolor)) P <- ggraph(mygraph,layout='mds') + geom_edge_link(edge_colour="black", edge_alpha=0.2, edge_width=0.3) + geom_node_point(aes(size=n, fill=as.factor(group)), shape=21,color='black',alpha=0.9) + scale_size_continuous(range=c(0.5,10)) + scale_fill_manual(values=mycolor) + geom_node_text(aes(label=ifelse(n>100, as.character(name), "")), size=3, color="black") + expand_limits(x = c(-1.2, 1.2), y = c(-1.2, 1.2))+ theme_minimal() + theme( legend.position="none", panel.grid = element_blank(), axis.line = element_blank(), axis.ticks =element_blank(), axis.text =element_blank(), axis.title = element_blank() #plot.margin=unit(c(0,0,0,0), "null"), #panel.spacing=unit(c(0,0,0,0), "null") ) pdf(file=paste(prefix,'.pdf',sep='')) P dev.off() svg(filename=paste(prefix,'.svg',sep='')) P dev.off() ggsave(filename=paste(prefix,'.png',sep=''),type='cairo-png',plot=P)