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)