如何在条形图中按x因子层级对填充变量升序排序?
分组条形图自定义排序问题
我需要制作一个分组条形图,要求:
- x轴为
manufacturer,条形填充颜色由class决定 - 每个
manufacturer分组内的条形按num(计数)升序排列 manufacturer的排序依据是各分组内的最小num值升序排列
我尝试了以下代码:
library(ggplot2) library(tidyverse) # 确定manufacturer的排序 manufacturer_order <- mpg %>% dplyr::group_by(manufacturer, class) %>% dplyr::summarise(num= dplyr::n()) %>% dplyr::group_by(manufacturer) %>% dplyr::arrange(num, .by_group = TRUE) %>% dplyr::mutate(dupl= duplicated(manufacturer)) %>% dplyr::filter(!dupl) %>% dplyr::arrange(num) %>% .$manufacturer # 处理数据并按要求排序 mpg_ordered <- mpg %>% dplyr::mutate(manufacturer= factor(manufacturer, levels= manufacturer_order)) %>% dplyr::arrange(manufacturer) %>% dplyr::group_by(manufacturer, class) %>% dplyr::summarise(num= dplyr::n()) %>% dplyr::group_by(manufacturer) %>% dplyr::arrange(num, .by_group = TRUE) # 绘图 mpg_ordered %>% ggplot(., aes(x= manufacturer, y= num, fill= class)) + geom_bar(stat= "identity", position = "dodge", color='black')
当前生成的图表存在问题:manufacturer的排序符合预期,但每个manufacturer分组内的class条形顺序不符合要求。比如第一个分组nissan内,条形顺序应该是compact(num=2)、suv(num=4)、midsize(num=7),但实际并非如此。
我无法通过统一修改class的因子顺序来解决,因为class在不同manufacturer分组中的排序逻辑不同。我希望所有条形的顺序完全匹配mpg_ordered的行顺序:
> mpg_ordered # A tibble: 32 x 3 # Groups: manufacturer [15] manufacturer class num <fct> <chr> <int> 1 nissan compact 2 2 nissan suv 4 3 nissan midsize 7 4 audi midsize 3 5 audi compact 15 6 lincoln suv 3 7 land rover suv 4 8 mercury suv 4 9 subaru compact 4 10 subaru subcompact 4 # i 22 more rows # i Use `print(n = ...)` to see more rows
期望的图表效果是每个manufacturer分组内的条形按对应num升序排列,即每个分组内数值小的条形在前、数值大的在后,整体x轴分组按各自最小num值升序排列。
内容的提问来源于stack exchange,提问作者LulY
相关产品推荐
相关产品推荐

