ggplot2条形图中的条形顺序和颜色排序

15

我在使用ggplot2创建堆叠条形图时遇到了一个非常烦人的问题。虽然有几个类似的问题之前被问到过,但是在查看了示例代码后,我无法弄清楚我的错误在哪里。

我希望制作的图表按照Biogeographic.affinity中的以下顺序堆叠条形:(从上到下= Bassian, Widespread, Torresian,和Eyrean)。 条形的颜色应该是:(Bassian=drakgrey,Widespread=lightgrey,Torresian=white,Eyrean=black)。

这是数据集的样子:

  biogeo
       Site Biogeographic.affinity Rank Number.of.species Total.Species    Percent
    1     A                Bassian    1                 1           121  0.8264463
    2     A                 Eyrean    4                39           121 32.2314050
    3     A              Torresian    3                62           121 51.2396694
    4     A             Widespread    2                19           121 15.7024793
    5    DD                Bassian    1                 1           128  0.7812500
    6    DD                 Eyrean    4                46           128 35.9375000
    7    DD              Torresian    3                63           128 49.2187500
    8    DD             Widespread    2                18           128 14.0625000
    9   E_W                Bassian    1                 1           136  0.7352941
    10  E_W                 Eyrean    4                54           136 39.7058824
    11  E_W              Torresian    3                65           136 47.7941176
    12  E_W             Widespread    2                16           136 11.7647059
    13   KS                Bassian    1                 2           145  1.3793103
    14   KS                 Eyrean    4                63           145 43.4482759
    15   KS              Torresian    3                62           145 42.7586207
    16   KS             Widespread    2                18           145 12.4137931
    17 Z_Ka                Bassian    1                 1           110  0.9090909
    18 Z_Ka                 Eyrean    4                64           110 58.1818182
    19 Z_Ka              Torresian    3                31           110 28.1818182
    20 Z_Ka             Widespread    2                14           110 12.7272727

这是我目前为止写的代码(包括我尝试解决问题时的一些失败尝试)。

 ggplot(data=biogeo, aes(x=Site, y=Percent, fill=Biogeographic.affinity)) + geom_bar(stat="identity", colour="black")+ 
  scale_fill_grey() + ylab("Percent") + xlab("Location") +       
  theme_bw()+ theme(panel.grid.minor = element_blank()) 

这给出了基本的图表,但颜色和顺序仍然不正确。为了纠正顺序,我尝试了一些方法,但没有改变任何东西(感到沮丧)!

newone <- transform(biogeo, Biogeographic.affinity  = factor(Biogeographic.affinity ), Rank = factor(Rank, levels = 1:4))

关于改变颜色,我已经尝试过了,似乎可以工作,但整个顺序看起来仍然不正确!

cols<- c("Bassian"="darkgrey","Widespread"="lightgrey", "Torresian"="white", "Eyrean"="black") #designates the colors of the bars 
ggplot(data=newone, aes(x=Site, y=Percent, fill=Biogeographic.affinity)) + geom_bar(stat="identity", colour="black")+ 
  scale_fill_manual(values = cols) + ylab("Percent") + xlab("Location") +       
  theme_bw()+ theme(panel.grid.minor = element_blank()) 

请帮忙。

1个回答

17

在ggplot2中堆叠条形图中绘制的条形的顺序(从下到上)是基于定义组的因子的排序。因此,必须重新排序“生物地理亲缘关系”因子。通常我们使用 reorder(如果要根据连续级别对因子进行排序),但这里我将创建一个新的有序因子,类似于您尝试做的。

 biogeo <- transform(biogeo, 
                Biog.aff.ord  = factor(
                     Biogeographic.affinity ,
                     levels=c( 'Bassian','Widespread','Torresian', 'Eyrean'),
                     ordered =TRUE))

现在,如果你使用Biog.aff.ord来填充你的条形图,而不是使用原始因子,并通过定义aes_group_order为Biog.aff.ord顺序来覆盖默认分组顺序,那么你将得到预期的结果:

cols <- c(Bassian="darkgrey",Widespread="lightgrey", 
            Torresian="white", Eyrean="black") 
ggplot(data=biogeo, aes(x=Site, y=Percent,
       order=Biog.aff.ord)) +   ##!! aes_group_order
  geom_bar(stat="identity", colour="black",
        aes(fill=Biog.aff.ord)) +
  scale_fill_manual(values = cols) 

输入图像描述


@IDelToro 等级的顺序是什么?为什么? - agstudy
9
在当前版本的ggplot2中,对于具有“stat =”identity“”和“position =”stack“或“position =”fill“”的条形图而言,排序因子级别不再起作用。(此外,我认为“order”审美已经消失了。)相反,现在必须将数据框本身实际排序到“正确”的顺序中。请参见此处 - joran

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