ggplot2 barplot中条形的顺序和颜色 [英] Order and color of bars in ggplot2 barplot

查看:1040
本文介绍了ggplot2 barplot中条形的顺序和颜色的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

对于使用 ggplot2 创建的堆积条形图,我有一个非常烦人的问题。
以前有几个类似的问题,但通过示例代码后,我无法弄清楚我做错了什么。

I have a very annoying problem with a stacked bar plot created using ggplot2. There are a couple of similar questions previously asked but after going through the example code I cannot figure out what I am doing wrong.

我想制作图表,以便根据它们的 Biogeographic.affinity :(从上到下= Bassian,Widespread,Torresian和Eyrean)。酒吧的颜色应该是:(Bassian = drakgrey,Widespread = lightgrey,Torresian =白色,Eyrean =黑色)。

I would like to make the graph so that the bars are stacked in the following order based on their Biogeographic.affinity: (Top to Bottom= Bassian,Widespread,Torresian, and Eyrean). The colors to the bars should be: (Bassian=drakgrey, Widespread=lightgrey, Torresian=white, and Eyrean=black).

这是数据集的样子:

This is what the dataset looks like:

  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

这是我的代码w ^到目前为止(包括我的一些失败的尝试来纠正这个问题)。

This is the code I have written so far (including some of my failed attempts to correct the problem).

 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()) 

这给出了基本图形,但颜色和顺序仍然是错误的。为了纠正我试过的顺序,但没有改变任何东西(FRUSTRATED)!:

This gives the basic graph but the colors and order are still wrong. To correct the order I tried, but that did not change anything (FRUSTRATED)!:

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



至于颜色变化,我尝试过,似乎工作,但它看起来像订单仍然是错误的!

As for color changing I have tried and seems to work but it all looks like the order is still wrong!

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()) 

请大家帮忙。

推荐答案

在ggplot2的堆叠barplot中绘制条形图的顺序(从上到下)取决于因子的排序它定义了组。所以Biogeographic.affinity因子必须重新排序。一般来说,我们使用 reorder (如果我们想按照连续的水平排列因子),但在这里我将创建一个与您尝试做的相似的新的有序因子。 / b>

The order that bars are drawn (bottom to top) in a stacked barplot in ggplot2 is based on the ordering of the factor which defines the groups. So the Biogeographic.affinity factor must be reordered. Generally we use reorder(if we want to order the factor according to a continuous levels) but here I will just create a new ordered factor similar to what you tried to do.

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

现在如果您使用 Biog.aff.ord 填充您的barplot,而不是原始因子,并通过定义 aes_group_order来覆盖默认分组顺序作为Biog.aff.ord命令,您可以获得预期结果:

Now if you fill your barplot using Biog.aff.ord rather than the original factor and overriding the default grouping order by defining aes_group_order as Biog.aff.ord order you get the expected result:

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) 

这篇关于ggplot2 barplot中条形的顺序和颜色的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆