我正在制作带有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的第二个位置第一个柱形柱的轴位置,就像我预期的那样基于an earlier post。
下一个代码片段确实以所需方式显示数据,但我认为这是简单和小型示例数据集的工件。堆叠顺序尚未指定,因此我认为ggplot基于Amount的值进行堆叠。
ggplot(d, aes(x = Day, y = Length)) + geom_bar(aes(fill = Amount), stat = "identity")
我想要的是是强制ggplot按照位置值递减的顺序堆叠数据(Location = 4最接近x轴,Location = 3 next,...,Location = 1在栏栏的最顶部)通过调用order =
或一些等价的参数。有什么想法或建议吗?
似乎应该很容易,因为我只处理数字。要求ggplot以对应于减少的列(当你离开x轴的数字)对应的方式堆叠数据时应该不是很难吗?
答案 0 :(得分:6)
尝试:
ggplot(d, aes(x = Day, y = Length)) +
geom_bar(aes(fill = Amount, order = -Location), stat = "identity")
请注意我如何与rev
交换-
。使用rev
做了一些非常不同的事情:如果你颠倒Location
列中的值的顺序,它会堆叠你偶然得到的每一行的值,这可能只是任何事情。