ggpubr:按组排序但排序顺序不同(asc,desc)

我想按组对数据进行排序,然后对每个组按不同的顺序(升序、无、降序)排序,但似乎 ggpubrsort.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
          )

cs_chenzz 回答:ggpubr:按组排序但排序顺序不同(asc,desc)

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

  1. 第一列的行名rownames_to_column
  2. cyl 分解
  3. 在使用 sort 语句将组内的 ifelse 分组后
  4. 和重要的arrange by 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
)

enter image description here

,

我不知道是否可以在 ggbarplotggpubr 函数内完成,但这是一种操纵因子水平的方法。

我们创建了一个数据框 (order_data),它具有我们希望为每个组对数据进行排序的顺序。在这里,我使用约定 1 作为升序,0 作为无序,-1 作为降序。

library(dplyr)
library(ggpubr)

order_data <- data.frame(cyl = factor(c(4,6,8)),order = c(1,-1))
order_data

#  cyl order
#1   4     1
#2   6     0
#3   8    -1

order 值与 mpgarrange 数据相乘,根据它们的出现和绘图将名称值转换为因子。

dfm %>%
  left_join(order_data,by = 'cyl') %>%
  arrange(cyl,mpg * order) %>%
  mutate(name = factor(name,name)) %>%
  ggbarplot(x = "name",# jco journal color palett. 
          x.text.angle = 90 # Rotate vertically x axis texts
)

enter image description here

本文链接:https://www.f2er.com/3007.html

大家都在问