title: How to change stacking order in stacked bar chart in R?
body: <p>I have a dataset like this:</p>
  
  <pre><code>&gt; ra
     quality     GY         TH         SZ         DZ         FP
  1        B 25.5932389 23.0215577 21.2171520 23.7548859 19.9848602
  2        F 13.9567819 15.8975387 16.0363831 14.4732136 16.4207350
  3        M 11.7333000 10.5075000 11.1540000 12.1292000 12.9683000
  4        A  8.6439000  7.8888000  8.5094000 10.4722000 11.2059000
  5        G  7.8351008  8.8121504  7.9458840  8.0838209  7.5143706
  6        E  8.2900000  8.2760000 10.2717000  7.0575000  6.8747000
  7        J  6.0596430  6.4356378  5.4962929  5.1445980  5.8653262
  8        D  3.8608517  3.9147685  4.1381946  4.1741180  5.5412901
  9        C  4.3277000  5.4838000  5.1141000  5.4004000  4.1820000
  10       I  3.1710598  3.9339386  3.4053352  3.1940577  3.5347168
  11       K  1.2021144  1.3921565  1.8472827  1.4427867  1.3838249
  12       L  1.0986329  0.7424060  1.0648934  1.1323864  0.8811604
  13       H  0.9369271  0.8795013  0.9792861  0.8986281  0.8585596
  14   other  3.2907496  2.8142444  2.8200960  2.6422047  2.7842562
  </code></pre>
  
  <p>I tried to plot it in R:</p>
  
  <pre><code>ra &lt;- read.table("stack_data.txt", header = T)
  library(reshape2)
  library(ggplot2)
  ra.melt &lt;- melt(ra)
  head(ra.melt)
  # Output
    quality variable     value
  1       B       GY 25.593239
  2       F       GY 13.956782
  3       M       GY 11.733300
  4       A       GY  8.643900
  5       G       GY  7.835101
  6       E       GY  8.290000
  p &lt;- ggplot(ra.melt, aes(x = variable, y = value))
  p + geom_bar(aes(fill = quality), stat = "identity") + 
    labs(x = "group", y = "percentage (%)")
  </code></pre>
  
  <p><a href="https://i.stack.imgur.com/PPGUs.png" rel="noreferrer"><img src="https://i.stack.imgur.com/PPGUs.png" alt="enter image description here"></a>
  I want "group" and "quality" both in the exact order as in the original data. It turned out that "group" (used as x) was OK but "quality" (used to stack the bar) was in alphabetic order. How could I change the stacking order to match its original order? And if possible, I prefer <strong>not</strong> modify the order <strong>manually</strong>.</p>