如何在R中更改堆叠条形图中的堆叠顺序?

5

我有这样的一个数据集:

> 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

我尝试在R中绘制它:

ra <- read.table("stack_data.txt", header = T)
library(reshape2)
library(ggplot2)
ra.melt <- 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 <- ggplot(ra.melt, aes(x = variable, y = value))
p + geom_bar(aes(fill = quality), stat = "identity") + 
  labs(x = "group", y = "percentage (%)")

描述图片 我希望“组”和“质量”能按照原始数据中的确切顺序出现。结果发现,“组”(用作x轴)没问题,但是“质量”(用于堆积条形图)是按字母顺序排列的。如何更改堆叠顺序以匹配其原始顺序?如果可能的话,我希望手动修改排序。


手动修改订单是什么意思? - Heroka
1个回答

4

我认为质量按照原始顺序堆叠:B,F,M等。我猜你想改变的是图例的顺序:

ra.melt$quality <- factor(ra.melt$quality, levels = ra$quality)
p <- ggplot(ra.melt, aes(x = variable, y = value))
p + geom_bar(aes(fill = quality), stat = "identity") + 
    labs(x = "group", y = "percentage (%)")

在此输入图片描述

或者反向顺序:

ra.melt$quality <- factor(ra.melt$quality, levels = rev(ra$quality))
p <- ggplot(ra.melt, aes(x = variable, y = value))
p + geom_bar(aes(fill = quality), stat = "identity") +  
    labs(x = "group", y = "percentage (%)")

enter image description here

Notes

The legend takes the levels of the factor, which are sorted alphabetically by default:

levels(ra.melt$quality)
# Output
 [1] "A"     "B"     "C"     "D"     "E"     "F"     "G"     
     "H"     "I"     "J"     "K"     "L"     "M"     "other"

With ra.melt$quality <- factor(ra.melt$quality, levels = ra$quality) we set the order of the levels of the factor as they originally occur in the vector:

levels(ra.melt$quality)
#Output:
[1] "B"     "F"     "M"     "A"     "G"     "E"     "J"   
    "D"     "C"     "I"     "K"     "L"     "H"     "other"


非常感谢您的回答和改进我的代码和图表(由于声望不够,我无法添加图表)。您的回答正是我所需要的!但是有一件事我不明白,在 ra.melt$quality <- factor(ra.melt$quality, levels = ra$quality) 中,似乎您将“quality”的顺序设置为了它本身(并且它起作用了!)。如果是这样,为什么我的原始顺序不起作用?您能给我一些解释吗? - YT Li
@YTLi 不用谢。我在答案中添加了解释,希望这有所帮助。请考虑通过点击勾选标记来接受问题 - mpalanco
谢谢!那很有道理。 - YT Li

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接