ggplot根据数据框中的值重新排序堆积条形图

Jam*_*mes 3 r bar-chart ggplot2 stacked-chart

我正在制作带有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")
Run Code Online (Sandbox Code Playgroud)

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

第二个ggplot图以不同的顺序显示数据,但它没有堆叠具有最接近x轴的最高位置值的数据,而下一个最高位置的数据堆叠在距离x轴位置的第二个位置.第一个栏目栏,就像我希望它基于之前的帖子一样.

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

ggplot(d, aes(x = Day, y = Length)) + geom_bar(aes(fill = Amount), stat = "identity")
Run Code Online (Sandbox Code Playgroud)

我想要的是强制ggplot按照位置值递减的顺序堆叠数据(位置= 4最接近x轴,位置= 3接下来,...,位置= 1位于条形列的最顶部)调用order =或等价的参数.有什么想法或建议吗?

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

Bro*_*ieG 6

尝试:

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

注意我是如何交换rev的-.使用rev做了一些非常不同的事情:如果你颠倒了列中值的顺序,它会堆积你偶然得到的每一行的值Location,这可能就是任何事情.