首页 > 解决方案 > 按降序排列 facet_wrap 图

问题描述

我正在尝试使用facet_wrap默认情况下按字母顺序排列图。但是,所需的结果是按数字降序对其进行排序。

以下是我得到的:

library(tidyverse)

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

ggplot(M, aes(A, B)) + 
    geom_bar(stat = "identity") + 
    facet_wrap(~C)

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

arrange(M, desc(B)) %>%
    ggplot(aes(A, B)) + 
    geom_bar(stat = "identity") + 
    facet_wrap(~C)   ## need it ordered by B

我知道一种方法是改变关卡,但我不知道我可以在序列中的哪个位置以及如何做到这一点。

标签: rggplot2dplyrfacet-wrap

解决方案


C您可以根据 的值B(按降序排列)在 中使用或forcats::fct_reorderbase对因子水平重新排序:reorderfacet_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


推荐阅读