I need help on how to generate a reversed stacked bar plot with specific ylim. I have used the code below for this purpose but the plot is generated in reverse order as expected but the ylim option did not work i.e, the y-axis labels were auto generated.
This is the data:
df <- structure(list(z = c("up", "up", "up", "up", "up", "up", "down",
"down", "down", "down", "down", "down"), x = c("C", "C", "G", "G", "H", "H",
"C", "C", "G", "G", "H", "H"), w = c("more", "less", "more", "less", "more",
"less", "more", "less", "more", "less", "more", "less"), y = c(5, 6, 4, 4,
50, 42, 50, 16, 24, 8, 83, 99)), class = c("tbl_df", "tbl", "data.frame"),
row.names = c(NA, -12L)
My code is
ggplot(df, aes(x, y, fill=w)) geom_bar(stat='identity') facet_wrap(~z, scales="free_y", ncol = 1) xlab('a') ylab('b') theme(panel.background = element_blank(),axis.text = element_text(size = 8, color = 'black'), text = element_text(size = 8),plot.title = element_text(hjust = 0.5)) ggtitle('T') ylim(0,500) scale_y_continuous(trans="reverse")
However, using the same code without reversing the plot generates a stacked plot in an upright position and with ylim as specified.
ggplot(df, aes(x, y, fill=w)) geom_bar(stat='identity') facet_wrap(~z, scales="free_y", ncol = 1) xlab('a') ylab('b') theme(panel.background = element_blank(),axis.text = element_text(size = 8, color = 'black'), text = element_text(size = 8),plot.title = element_text(hjust = 0.5)) ggtitle('T') ylim(0,500)
"scale_y_continuous(trans="reverse")",
I need help on how to successfully generate this plot. Thanks
CodePudding user response:
You can use scale_y_reverse instead of scale_y_continuous with trans = "reverse". You can specify the limits using the limits argument rather than an extra call to ylim, and you need to specify the numbers from highest to lowest.
ggplot(df, aes(x, y, fill = w))
geom_col()
facet_wrap(~z, scales = "free_y", ncol = 1)
labs(x = 'a', y = "b", title = "T")
theme(panel.background = element_blank(),
axis.text = element_text(size = 8, color = 'black'),
text = element_text(size = 8),
plot.title = element_text(hjust = 0.5))
scale_y_reverse(limits = c(500, 0))

