[英]Mantain order of dataframe for a stacked barplot using ggplot2
使用以下 dataframe 和 ggplot...
sample ="BC04"
df<- data.frame(Name=c("Pseudomonas veronii", "Pseudomonas stutzeri", "Janthinobacterium lividum", "Pseudomonas viridiflava"),
Abundance=c(7.17, 4.72, 3.44, 3.33))
ggplot(data=df, aes(x=sample, y=Abundance, fill=Name)) +
geom_bar(stat="identity")
...創建以下圖表
盡管 "geom_bar(stat="identity")" 設置為 "identity",但它仍然忽略 dataframe 中的順序。 我想根據豐度百分比獲得堆疊順序(最高百分比在頂部,升序排列)
早些時候,傳遞給ggplot
的字符串是用aes_string
評估的(現在已棄用)。 現在,我們將字符串轉換為sym
並計算 ( !!
)
library(ggplot2)
ggplot(data=df, aes(x= !! rlang::sym(sample), y=Abundance, fill=Name)) +
geom_bar(stat="identity")
或者另一種選擇是.data
ggplot(data=df, aes(x= .data[[sample]]), y=Abundance, fill=Name)) +
geom_bar(stat="identity")
通過檢查 plot,可能是 OP 創建了一個名為 'sample. 在這種情況下,我們根據“Abundance”的desc
對“名稱” reorder
df$sample <- "BC04"
ggplot(data = df, aes(x = sample, y = Abundance,
fill = reorder(Name, desc(Abundance)))) +
geom_bar(stat = 'identity')+
guides(fill = guide_legend(title = "Name"))
-輸出
或者另一種選擇是將“名稱”轉換為“名稱”的unique
元素提到的levels
的factor
(因為數據已經按“豐度”的降序排列)
library(dplyr)
df %>%
mutate(Name = factor(Name, levels = unique(Name))) %>%
ggplot(aes(x = sample, y = Abundance, fill = Name)) +
geom_bar(stat = 'identity')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.