set.seed(123456)
df=data.frame(
  pathway=c(sample(LETTERS,5),
            sample(LETTERS,5)),
  pvalue= abs(rnorm(10))/100,
  group = rep(c('up','down'),each=5)
)
table(df$pathway)
## 
## C D F G J M Q V Z 
## 1 1 1 1 2 1 1 1 1
df
##    pathway       pvalue group
## 1        J 0.0131241551    up
## 2        Z 0.0250264541    up
## 3        Q 0.0116823174    up
## 4        G 0.0042616558    up
## 5        M 0.0099612975    up
## 6        V 0.0111394990  down
## 7        D 0.0005573154  down
## 8        F 0.0117443240  down
## 9        J 0.0105321861  down
## 10       C 0.0005760597  down
#############################
library(ggplot2)
library(ggsci)
df[df$group %in% "down",]$pvalue <- df[df$group %in% "down",]$pvalue*-1
df[duplicated(df$pathway),"pathway"] <- paste0(df[duplicated(df$pathway),"pathway"],".1")
df$pathway <- factor(df$pathway,levels = df[order(df$pvalue,decreasing = T),"pathway"])
str(df)
## 'data.frame':    10 obs. of  3 variables:
##  $ pathway: Factor w/ 10 levels "Z","J","Q","M",..: 2 1 3 5 4 9 6 10 8 7
##  $ pvalue : num  0.01312 0.02503 0.01168 0.00426 0.00996 ...
##  $ group  : chr  "up" "up" "up" "up" ...
name.y <- substr(df$pathway,1,1)
name.y
##  [1] "J" "Z" "Q" "G" "M" "V" "D" "F" "J" "C"
names(name.y) <- df$pathway

ggplot(df,aes(x=pathway,y=pvalue, fill=factor(group)))+geom_bar(stat="identity")+coord_flip( )+
  scale_x_discrete(
    "pathway",
    labels = name.y)+
  scale_fill_d3()