3

我正在用 R 中的 ggplot2 制作堆积条形图,并在 y 轴上进行特定的条形排序。

# create reproducible data
library(ggplot2)
d <- read.csv(text='Day,Location,Length,Amount
            1,4,3,1.1
            1,3,1,2
            1,2,3,4
            1,1,3,5
            2,0,0,0
            3,3,3,1.8
            3,2,1,3.54
            3,1,3,1.1',header=T)

ggplot(d, aes(x = Day, y = Length)) + geom_bar(aes(fill = Amount, order = Location), stat = "identity")

ggplot(d, aes(x = Day, y = Length)) + geom_bar(aes(fill = Amount, order = rev(Location)), stat = "identity")

第一个 ggplot 图按位置顺序显示数据,其中 Location=1 最接近 x 轴,并且位置的每个递增值的数据堆叠在下一个上。

第二个 ggplot 图以不同的顺序显示数据,但它不会将具有最接近 x 轴的最高位置值的数据与下一个最高位置的数据堆叠在从 x 轴位置开始的第二个位置第一个栏,就像我希望它基于之前的帖子一样

下一个片段确实以所需的方式显示数据,但我认为这是简单和小型示例数据集的产物。尚未指定堆叠顺序,因此我认为 ggplot 是根据 Amount 的值进行堆叠的。

ggplot(d, aes(x = Day, y = Length)) + geom_bar(aes(fill = Amount), stat = "identity")

我想要的是通过调用order =或一些等效的参数。有什么想法或建议吗?

看起来应该很容易,因为我只处理数字。要求 ggplot 以对应于一列递减(随着您远离 x 轴)数字的方式堆叠数据应该不难,不是吗?

4

1 回答 1

6

尝试:

ggplot(d, aes(x = Day, y = Length)) + 
  geom_bar(aes(fill = Amount, order = -Location), stat = "identity")

注意我是如何rev-. Usingrev做了一些非常不同的事情:如果你颠倒 column 中值的顺序,它会按你碰巧得到的每一行的值堆叠Location,这可能是任何东西。

于 2015-06-09T18:12:41.680 回答