R/plot_ranks.R

Defines functions norvisualization

Documented in norvisualization

#' @title circular barplot
#' @details Draw circular barplot and save as MetaboNAREVA-OUTPUT.Figure.workflows.pdf. For function definitions and descriptions please use "??ProteoLFQ" command in R.
#' @param object The input is the output file of the "multiclass_non", "multiclass_qcs", "timecourse_non" or "timecourse_qcs" et al.
#' @importFrom reshape2 melt
#' @import ggplot2
#' @importFrom grDevices dev.off pdf
#' @examples norvisualization(object = allranks)
#' @export norvisualization

norvisualization <- function(object){

zuihou <- object
data_length<-as.data.frame(zuihou[,-c(1:5)])

data_length["Criteria.Ca.Value"][data_length["Criteria.Ca.Value"]>=0.7]<-5
data_length["Criteria.Ca.Value"][data_length["Criteria.Ca.Value"]<0.7&data_length["Criteria.Ca.Value"]>=0.3]<-10
data_length["Criteria.Ca.Value"][data_length["Criteria.Ca.Value"]<0.3]<-40

data_length["Criteria.Cb.Value"][data_length["Criteria.Cb.Value"]>=0.8]<-40
data_length["Criteria.Cb.Value"][data_length["Criteria.Cb.Value"]<0.8&data_length["Criteria.Cb.Value"]>=0.5]<-10
data_length["Criteria.Cb.Value"][data_length["Criteria.Cb.Value"]<0.5]<-5

data_length["Criteria.Cc.Value"][data_length["Criteria.Cc.Value"]>=0.3]<-40
data_length["Criteria.Cc.Value"][data_length["Criteria.Cc.Value"]<0.3&data_length["Criteria.Cc.Value"]>=0.15]<-10
data_length["Criteria.Cc.Value"][data_length["Criteria.Cc.Value"]<0.15]<-5

data_length["Criteria.Cd.Value"][data_length["Criteria.Cd.Value"]>=0.9]<-40
data_length["Criteria.Cd.Value"][data_length["Criteria.Cd.Value"]<0.9&data_length["Criteria.Cd.Value"]>=0.7]<-10
data_length["Criteria.Cd.Value"][data_length["Criteria.Cd.Value"]<0.7]<-5

data_length_m<-as.data.frame(data_length)
Ranksum_length<-apply(data_length_m, 1, sum)
data_length_m01<-cbind( "rank_length"=Ranksum_length,data_length_m)
data_length_m02<-data_length_m01[order(data_length_m01[,"rank_length"],decreasing =T),]
data_length_m<-data_length_m02

data_bar<-data_length_m[,-1]
colnames(data_bar) <- c("Criterion Ca: Reduction of Intragroup Variation","Criterion Cb: Differential Metabolic Analysis","Criterion Cc: Consistency in Marker Discovery","Criterion Cd: Classification Accuracy")

data_bar <- cbind("Method" = row.names(data_bar), data_bar)
data_bar$Method <- factor(data_bar$Method, levels = data_bar$Method)##按从大到小排序levels = rev(data_bar$Method)实现从小到大排序

data_bar2 <- melt(data_bar, id.vars = "Method", variable.name = "Criteria")
data_bar2$Criteria <- factor(data_bar2$Criteria, levels = rev(unique(data_bar2$Criteria)))

label_data <- data_bar2

# Set a number of 'empty bar'
empty_bar <- 8
# Add lines to the initial dataset
Method <- rep(NA,empty_bar)
Criteria <- rep(as.character(unique(label_data$Criteria)),2)
value <- rep(0,empty_bar)
to_add <- cbind(Method,Criteria,value)

colnames(to_add) <- colnames(label_data)
to_add <- as.data.frame(to_add)
label_data <- rbind(label_data, to_add)

number_of_bar <- nrow(zuihou)+8

id <- c(rep(c(1:nrow(zuihou)),3),seq(nrow(zuihou):nrow(zuihou)+8))
length(id)
dim(label_data)
label_data1 <- cbind(id,label_data)

angle <-  90 - 360 * (label_data1$id-1.5) /number_of_bar     # I substract 0.5 because the letter must have the angle of the center of the bars. Not extreme right(1) or extreme left (0)
# calculate the alignment of labels: right or left
# If I am on the left part of the plot, my labels have currently an angle < -90
label_data1$hjust<-ifelse(angle < -90, 1, 0)

# flip angle BY to make them readable
label_data1$angle<-ifelse(angle < -90, angle+180, angle)

label_data1$value <- as.integer(label_data1$value)
label_data1$hjust <- as.integer(label_data1$hjust)

value <- c(rep(40,nrow(zuihou)))
label_data1_tc <- data.frame("Method" = as.character(label_data1[c(1:nrow(zuihou)),2]),
                             "value" = as.numeric(value),
                             "id" = label_data1[c(1:nrow(zuihou)),1],
                             "angle" = label_data1[c(1:nrow(zuihou)),6],
                             "hjust" = label_data1[c(1:nrow(zuihou)),5])

label_data1$Criteria <- factor(label_data1$Criteria,levels = c("Criterion Ca: Reduction of Intragroup Variation","Criterion Cc: Consistency in Marker Discovery","Criterion Cb: Differential Metabolic Analysis","Criterion Cd: Classification Accuracy"))

#pdf(file=paste("./MetaboNAREVA-OUTPUT.Figure.workflows.pdf",sep="."), width=12,height=9)

ggplot(data = label_data1, mapping = aes(x = id, y = value, fill = Criteria)) +

  geom_bar(stat = "identity") +
  scale_fill_manual(values = c("#4285f4","#34a853","#fbbc05","#ea4335")) +
  #guides(fill=F)+
  ylim(-20,140)+
  coord_polar(start = 0)+
  theme_minimal() +
  theme(
    axis.text = element_blank(),
    axis.title = element_blank(),
    panel.grid = element_blank(),
    legend.position = c(0, .95),
    legend.justification = c(0, .95),
    legend.key.size=unit(0.3,'cm'),
    plot.margin = unit(rep(-1,4), "cm")      # Adjust the margin to make in sort labels are not truncated!
  )+
  geom_text(data=label_data1_tc, aes(x=id, y=value+90, label=Method, hjust=label_data1_tc$hjust), color="black", alpha=1, fontface="bold", size=2, angle= label_data1_tc$angle, inherit.aes = F, check_overlap = TRUE)

#dev.off()
#message("The 'figure' has been successfully saved in the current path.")
#message("Please use 'getwd()' to find the current path!")
}
YingZhang0811/test11 documentation built on Aug. 9, 2020, 12:32 a.m.