Сгруппированный барплот с двумя факторами - PullRequest
0 голосов
/ 14 октября 2018

Я хотел бы создать блок-график с ggplot2, который имеет факторную переменную по оси x, числовое значение по оси y и несколько столбцов на каждый тик по оси x.
Этот столбик похож натот, который я использую:

A tibble: 26 x 4
     Param Value      Res                   Comp
    <fctr> <dbl>   <fctr>                  <chr>
 1    Par1 13.45      Re1                      a
 2    Par2 10.86      Re1                      a
 3    Par3 10.32      Re2                      a
 4    Par2 23.62      Re2                      a
 5    Par1 19.43      Re2                      a
 6    <NA>  0.00      Re3                      b
 7    <NA>  0.00      Re4                      b
 8    Par1 27.44      Re5                      b
 9    <NA>  0.00      Re6                      b
10    <NA>  0.00      Re6                      b

Вот данные:

structure(list(Param = c("Par1", "Par2", "Par3", "Par1", 
"Par4", NA, NA, "Par5", NA, NA, "Par6", "Par3", "Par7", "Par8", 
"Par3", "Par3", "Par6", "Par3", "Par7", "Par8", "Par3", "Par3", 
"Par6", "Par3", "Par7", "Par8"), Value = c(13.45, 10.86, 10.32, 
23.62, 19.43, 0, 0, 27.44, 0, 0, 11.37, 37.94, 11.23, 22.8, 19.25, 
22.26, 11.36, 19.03, 11.94, 22.79, 14.22, 17.21, 11.66, 23.93, 
12.33, 23.39), Res = c("Re1", "Re1", "Re2", "Re2", "Re2", 
"Re3", "Re4", "Re5", "Re6", "Re6_DOC", "Re7", "Re7", "Re7", 
"Re7", "Re6", "Re6_1", "Re7", "Re7", "Re7", "Re7", "Re6", 
"Re6_1", "Re7", "Re7", "Re7", "Re7"), Comp = c("Comp1", 
"Comp1", "Comp1", "Comp1", 
"Comp1", "Comp1", "Comp1", 
"Comp1", "Comp2", "Comp2", "Comp2", 
"Comp2", "Comp2", "Comp2", "Comp3", 
"Comp3", "Comp3", "Comp3", "Comp3", "Comp3", 
"Comp4", "Comp4", "Comp4", "Comp4", "Comp4", 
"Comp4")), .Names = c("Param", "Value", "Res", "Comp"), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -26L))

Так что я хотел бы иметь Res на оси X, значение на оси Yи в случае наличия нескольких параметров для каждого Res должны быть разные столбцы.Я также хочу, чтобы в фасетном переносе, если Res не присутствовал, он не должен быть на оси x (например, Re1 не должен быть в фасете).

Пока я сделал это:

tibble %>% 
  ggplot(aes(x=Res,y=Value)) +
  geom_bar(position="dodge",stat = "identity") +
  facet_wrap(~Comp)

Но для каждого Res появляется одна полоса, а на оси x различных граней появляются пустые галочки.
Кто-нибудьзнаете, как решить эту проблему?
Спасибо

1 Ответ

0 голосов
/ 14 октября 2018

Код для окончательного изображения:

df%>%ggplot(aes(x=Res,y=Value,fill=Param,label=Param))+geom_bar(position=position_dodge2(width = 0.9, preserve = "single"),stat = "identity")+facet_wrap(~Comp,scales = "free_x", as.table = FALSE)+
  geom_text(position = position_dodge(width = 0.9),hjust="top",angle = 90,size=5) + guides(fill=FALSE)+scale_fill_manual(values=brewer.pal(8, "Paired"))+theme(axis.title.x=element_blank())+scale_y_continuous("Percentage")
...