Сгруппированный барплот с двумя факторами
Я хотел бы создать boxplot с 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, Value на оси y и, если для каждого Res присутствует несколько параметров, должны быть разные столбцы. Я также хочу, чтобы в переносе фасетов, если Res не присутствует, он не должен быть на оси x (например, Re1 не должен быть в фасете b).
Сейчас я сделал это:
tibble %>%
ggplot(aes(x=Res,y=Value)) +
geom_bar(position="dodge",stat = "identity") +
facet_wrap(~Comp)
Но для каждого Res появляется одна полоса, а на оси x различных граней появляются пустые галочки.
Кто-нибудь знает как это решить?
Спасибо
1 ответ
Код для окончательного изображения:
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")