I'd like to make a stocked graph with geom_col() with below dataset.
tmp.df <- data.frame(
original = c(2.68, 1.05, 72.89, 11.81, 11.67, 2.85, 1.11, 72.74, 12.05, 11.95),
sensitivity = c('Si', 'Si', 'Si', 'Si', 'Si', 'STi', 'STi', 'STi', 'STi', 'STi'),
parameters = c('OMd', 'ED6_N', 'CP', 'dr_N', 'GE', 'OMd', 'ED6_N', 'CP', 'dr_N', 'GE')
)
Thus I did like below:
ord.eng <- c("CP", "GE", "OMd", "ED6_N", "dr_N")
library(ggplot2)
ggplot(tmp.df, aes(x = sensitivity, y = original))+
geom_col(aes(fill = parameters), width = 0.5, color = "black")+
ggtitle("Nu/Total N excretion") +
xlab("Sobol index")+
ylab("Sobol indices (%)")+
theme_classic()+
theme(plot.title = element_text(face = "bold", hjust = 0.5, size = 18),
axis.text.x = element_text(color = "black", size = 18),
axis.text.y = element_text(color = "black", size = 18),
axis.title = element_text(face = "bold", size = 18, color = "black"),
legend.text = element_text(size = 15),
legend.title = element_text(hjust = 0.5, size = 15))+
scale_y_continuous(breaks = seq(0, 140, 20))+
scale_fill_manual(name = "Variables", limits = ord.eng,
values = c("CP" = "White", "GE" = "ivory", "OMd" = "ivory3", "ED6_N" = "gray", "dr_N" = "black"))
However, the bar chart didn't stock 'ord.eng' order. It changed just legend order. But I'd like to stock it same order with legend.
Do you have any good ideas?
Thank you for your help.
One way of doing this is to turn the column you want to order by into a factor. The
levelsargument tells R the different values the variable can have, andggplotuses the order oflevelswhen deciding how to stack: