簡體   English   中英

使用 ggplot2 為堆疊條形圖維護 dataframe 的訂單

[英]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元素提到的levelsfactor (因為數據已經按“豐度”的降序排列)

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.

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