簡體   English   中英

根據 2 列中的值重新排序 ggplot 中的標簽

[英]Reorder labels in ggplot based on values in 2 colums

我想在 R 中構建一個條形 plot ,其中 x 軸上的標簽按Count如果Name == A的值排序。 當我構建它時,它只是簡單地訂購 x 軸“工具 1,工具 2,工具 3”。 我想要的是獲得像“工具 3,工具 1,工具 2”這樣的軸順序(按Name == A中的值排序)。

這是一個微型 dataframe 示例:

df <- rbind(tibble(Name = c('A', 'B', 'C'), Count = c(6, 3, 1), Method = rep('Tool 1', 3)),
        tibble(Name = c('A', 'B', 'C'), Count = c(4, 2, 4), Method = rep('Tool 2', 3)),
        tibble(Name = c('A', 'B', 'C'), Count = c(7, 3, 0), Method = rep('Tool 3', 3))
        )
df

# A tibble: 9 x 3
  Name  Count Method
  <fct> <dbl> <chr> 
1 A         6 Tool 1
2 B         3 Tool 1
3 C         1 Tool 1
4 A         4 Tool 2
5 B         2 Tool 2
6 C         4 Tool 2
7 A         7 Tool 3
8 B         3 Tool 3
9 C         0 Tool 3

要構建 plot:

p <- ggplot(df, aes(x = Method,
                       y = Count,
                       fill = Name)) +
  geom_bar(stat="identity")

p

在此處輸入圖像描述

我試圖用df %>% mutate(Method = fct_reorder(Method, desc(Count)))重新排列它,但我不知道如何僅通過 A 值來 select 。 我也可以手動重新排序,但我有興趣知道如何自動進行。 謝謝您的幫助 !

我們可以向 df 添加一列並使用reorder function

df$Count_A <- ifelse(df$Name == "A", df$Count, NA)

ggplot(df, aes(x = reorder(Method, -Count_A, mean, na.rm = TRUE),
               y = Count,
               fill = Name))+
  geom_bar(stat="identity")

在此處輸入圖像描述

或者,您可以將reorder ed 因子添加到df

df$Method <- reorder(df$Method, -df$Count_A, mean, na.rm = TRUE)

ggplot(df, aes(x = Method, y = Count, fill = Name)) +
  geom_bar(stat="identity")

使用relevel

p <- ggplot(transform(df, Method=relevel(as.factor(Method), ref="Tool 3")), 
            aes(x = Method,y = Count, fill = Name)) +
  geom_bar(stat="identity")
p

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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