簡體   English   中英

ggplot根據數據框中的值重新排序堆積條形圖

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM