按降序对facet_wrap图进行排序

Jon*_*ull 3 r ggplot2 facet-wrap dplyr

我试图facet_wrap用默认情况下按字母顺序对图进行排序来进行绘图。但是,期望的结果是按数字降序列对其进行排序。

\n\n

以下是我得到的:

\n\n
library(tidyverse)\n\nM <- data.frame(\n    A = LETTERS[1:10],\n    B = round(rnorm(10,200,50)), \n    C = letters[15:24]\n  )\n\nggplot(M, aes(A, B)) + \n    geom_bar(stat = "identity") + \n    facet_wrap(~C)\n
Run Code Online (Sandbox Code Playgroud)\n\n

相反,我希望得到按 B 列降序排列的图

\n\n
arrange(M, desc(B)) %>%\n    ggplot(aes(A, B)) + \n    geom_bar(stat = "identity") + \n    facet_wrap(~C)   ## need it ordered by B\n
Run Code Online (Sandbox Code Playgroud)\n\n

我知道一种方法是改变级别,但我不知道在序列中的哪个位置以及如何进行。

\n

Jor*_*hau 7

C您可以根据 的值B(按降序)使用forcats::fct_reorderreorder内的值重新排序因子水平facet_wrap

library(tidyverse)

## data
M <- data.frame(
    A = LETTERS[1:10],
    B = round(rnorm(10,200,50)), 
    C = letters[15:24]
  )

## using fct_reorder
ggplot(M, aes(x = A, y = B)) + 
    geom_bar(stat = "identity") + 
    facet_wrap(facets = ~fct_reorder(C, B, .desc = TRUE))

## using base reorder
ggplot(M, aes(x = A, y = B)) + 
    geom_bar(stat = "identity") + 
    facet_wrap(facets = ~reorder(C, -B))   ## -B to get descending order
Run Code Online (Sandbox Code Playgroud)