#' Grafico circular do indice de selecao de Mulamba e Mock com barras das medias dos parametros
#'
#' @param IS objeto de classe mulamba
#' @param dados data.frame com medias ou saida da PCA
#' @param ps porcentagem de selecao (default e 15)
#' @param axis.x tamanho letra dos genotipos (default e 3)
#' @export
#' @example
#'
#' @details data.frame deve obrigatoriamente ter a primeira coluna de genotipos e as demais as medias. O argumento orde da função mulamba() especifica se maiores valores sao melhores ou nao.
#'
#' resp1=c(10,11,12,7,6,5,4,4,5,12,7,16,5,4,4,5)
#' resp2=c(10,11,12,7,6,5,4,5,5,12,7,6,15,4,4,5)
#' resp3=c(10,11,12,7,6,5,4,4,5,12,7,6,10,4,7,5)
#' resp4=c(6,1,2,7,6,3,4,3,5,12,7,6,5,14,4,15)
#' trat=rep(paste("T",1:16))
#' dados=data.frame(trat,resp1,resp2,resp3,resp4)
#' library(IS)
#' a=mulamba(dados,orde = c("1","1","1","d"))
#' plot_mulamba(a,dados,ps=30)
#' plot_mulamba2(a,dados,ps = 35)
plot_mulamba2=function(IS,dados,ps=15,axis.x=3,posi=NA){
library(ggplot2)
data1=data.frame(gen=rownames(IS),mu=IS$mulamba)
data1$somaa=cumsum(IS$mulamba) # vou usar soma acumulada para ficar mais "bonito"
total=length(rownames(data1))
psel=round(total*ps/100,0)
data1$sel=rep(c("Selected","Nonselected"),c(psel,total-psel)) # No caso ainda manualmente
data1$gen=factor(data1$gen,levels = data1$gen)
linha=data1$mu[psel]
data=data.frame(gen=rep(data1$gen,length(colnames(dados))-1),
vari=rep(colnames(dados)[-1],e=length(rownames(data1))),
resp=unlist(c(IS[,-length(colnames(IS))])))
data$final=rep(data1$mu,length(colnames(dados))-1)
if(is.na(posi)==TRUE){posi=max(data$final)}
data$sel=rep(data1$sel,length(colnames(dados))-1)
number_of_bar = length(unique(data$gen))
data$id = as.numeric(as.factor(data$gen))
label_data = data
angle = 90 - 360 * (label_data$id-0.5) /number_of_bar
label_data$hjust <-ifelse(angle < -90, 1, 0)
label_data$angle <-ifelse(angle < -90, angle+180, angle)
nvar=length(levels(as.factor(data$vari)))
number_of_bar = length(unique(data$gen))
data$id = as.numeric(as.factor(data$gen))
label_data = data
angle = 90 - 360 * (label_data$id-0.5) /number_of_bar
label_data$hjust <-ifelse(angle < -90, 1, 0)
label_data$angle <-ifelse(angle < -90, angle+180, angle)
grafico=ggplot(data,aes(x=gen,y=resp,group=1))+
geom_col(aes(y=resp,fill=vari,group=1),size=4)+
coord_polar()+
theme_bw()+
theme(#legend.position = "rigth",
rect = element_blank(),
axis.text.x=element_blank(),
axis.ticks.y = element_blank(),
axis.text.y = element_blank())+
labs(color="Mulamba & Mock Index", fill="Variable",x="",y="")+
geom_line(aes(y=final,color=sel,group=1),size=1)+
geom_point(aes(y=final,color=sel,group=1),size=4, shape=16)+
geom_polygon(aes(y=rep(linha,total*length(colnames(dados)[-1]))),
group=1,fill=NA,color="black",lty=1,size=0.5)+
geom_text(data=label_data,
aes(x = id, y = posi, label=gen, hjust=hjust),
color=rep(c("white","black"),
c(number_of_bar*(nvar-1),number_of_bar)), fontface="bold",alpha=0.6, size=axis.x,
angle= label_data$angle, inherit.aes = FALSE )
print(grafico)
final=list(grafico)}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.