[英]ggplot reorder stacked bar plot based on values in data frame
我正在制作帶有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")
我想要的是強制ggplot按照位置值遞減的順序堆疊數據(位置= 4最接近x軸,位置= 3接下來,...,位置= 1位於條形列的最頂部)調用order =
或一些等價的參數。 有什么想法或建議嗎?
看起來應該很容易,因為我只處理數字。 要求ggplot以對應於減少的列(當你遠離x軸的數字)對應的方式堆疊數據應該是不是很難,是嗎?
嘗試:
ggplot(d, aes(x = Day, y = Length)) +
geom_bar(aes(fill = Amount, order = -Location), stat = "identity")
請注意我如何用-
交換rev
。 使用rev
做了一些非常不同的事情:如果你顛倒了Location
列中的值的順序,它會疊加你碰巧得到的每一行的值,這可能只是任何東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.