I have the following dataframe (df):
# A tibble: 6 × 2
chromosome n
<chr> <int>
1 TcChr34-S 16
2 TcChr41-S 10
3 TcChr28-S 9
4 TcChr11-S 2
5 TcChr2-S 1
6 TcChr5-S 1
I want to make a barplot using ggplot2:
ggplot(data = df,
aes(y=n,
x=chromosome)) +
geom_bar(stat = "identity")

However, the x-axis labels are not generated in numerical order. How can I fix it, i.e., put it in the following order?
"TcChr2-S", "TcChr5-S", "TcChr11-S", "TcChr28-S", "TcChr34-S", "TcChr41-S"
To order in ascending order of the numbers of chromosome, we have to pick out the numbers out of the string. This could be done with readrs parse_number() function (by the way up to this time my favorite function). The whole process is wrapped into to ´forcats´ ´fct_reorder´ function:
library(tidyverse)
df %>%
ggplot(aes(y=n, x=fct_reorder(chromosome, parse_number(chromosome)))) +
geom_bar(stat = "identity")

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With