首页 > 解决方案 > ggpubr:按组排序,但排序顺序不同(asc,desc)

问题描述

我想按组对数据进行排序,然后为每个组按不同的顺序(升序、无、降序)排序,但似乎ggpubr' 的sort.val参数只取长度为 1 的值。我想知道我能做些什么替代方法在没有大量修改的情况下,输出是否达到了预期的结果?

我将使用mtcars数据作为说明性示例。数据按cyl组(3组)排序并按顺序呈现asc,是否可以为三个组分配不同的排序顺序?比如说,“asc”、“none”、“desc”?(我试过c("asc", "none", "desc")了,但没有用)。

下面是我的最小工作示例。

# Require the package
library(ggpubr)


data("mtcars")
dfm <- mtcars
# Convert the cyl variable to a factor
dfm$cyl <- as.factor(dfm$cyl)
# Add the name colums
dfm$name <- rownames(dfm)
# Inspect the data
head(dfm[, c("name", "wt", "mpg", "cyl")])

# Sort by group and by ascending order

ggbarplot(dfm, x = "name", y = "mpg",
          fill = "cyl",       # change fill color by cyl
         color = "white", # Set bar border colors to white
          palette = "jco",  # jco journal color palett. 
          sort.val = "asc",  # Sort the value in dscending order 
          sort.by.groups = TRUE, # Sort inside each group
          x.text.angle = 90 # Rotate vertically x axis texts
          )

标签: rsortinggroupingggpubr

解决方案


这是第一次数据操作的另一种方式:

  1. 第一列的行名rownames_to_column
  2. cyl考虑因素
  3. sort在使用 andifelse语句分组后
  4. 重要arrange的是cyl
library(tidyverse)
library(ggpubr)

dfm <- mtcars %>% 
    rownames_to_column("name") %>% 
    mutate(cyl = as_factor(cyl)) %>% 
    group_by(cyl) %>% 
    mutate(mpg=ifelse(cyl==4, sort(mpg), mpg),
           mpg=ifelse(cyl==8, sort(mpg, decreasing = TRUE), mpg)
    ) %>% 
    arrange(cyl)

# plot
ggbarplot(dfm, x = "name", y = "mpg",
          fill = "cyl",       # change fill color by cyl
          color = "white", # Set bar border colors to white
          palette = "jco",  # jco journal color palett.  
          x.text.angle = 90 # Rotate vertically x axis texts
)

在此处输入图像描述


推荐阅读