首页 > 解决方案 > 使用预测重新排序组,但重新排列单个组的位置

问题描述

我有一个包含二十多个组的箱线图(它仍然可能会改变),我使用它重新排序fct_reorder;我想将一组(控制组)放在某个位置(第一个或最后一个),以将其与质量分开。

有没有一种简单的方法可以做到这一点,而不使用手动定义的顺序(因为可能我们添加了额外的组/数据,我们必须再次更改)?

library(dplyr)
library(ggplot2)
library(forcats)
data_CK <- CKRF %>% 
  select(CK, Group) %>% 
  mutate(Group = factor(Group, order = TRUE, labels = c("Neurologische Erkrankungen", "Arterielle Thromboembolie", "Kardiologische Erkrankungen", "Atemwegserkrankungen", 
                                                        "Pleuraerguss", "Nephropathien", "Probleme der Ableitende Harnwege", "Gastro-Intestinal Erkrankungen", "Leber/Pankreas", 
                                                        "Endokrinologische Erkrankugen", "Neoplasie", "Anämie", "Ophtalmologische Erkrankungen", "Dermatologische Erkrankungen", 
                                                        "Gynäkologische Erkrankungen", "Bewegapparat Probleme", "Anorexie", "Kontrollgruppe",
                                                        "Trauma", "Fieber Unbekannter Ursache")))



ggplot(data_CK, aes(x = fct_reorder(Group,CK), y = CK)) +  
         geom_boxplot(outlier.size = 0.2) +
  #coord_trans(y = 'log10') +
  scale_y_continuous(trans = "log10", breaks = c(350,1000, 5000, 10000, 50000, 1000000)) +
  coord_flip() + 
  #geom_point(size = 0.5) + 
  labs(y = 'CK (IU/L)', x = 'Erkrankungen') + 
  theme_minimal() +
  theme(legend.position = "none", axis.text.x = element_text(angle =  90, hjust = 1))

生成的箱线图,明确的问题:如何仅重新定位一组

标签: r

解决方案


这与您的顺序有关 factor levels。使用relevel(方便在公式中使用)或factor(., levels=). 示例(使用基图):

op <- par(mfrow=c(1, 3))

with(iris, boxplot(Petal.Length ~ Species))  ## original order

with(iris, boxplot(Petal.Length ~ relevel(Species, ref="virginica")))  ## virginica first (re)level

## custom order levels (set "virginica" so that it appears last)
iris2 <- transform(iris, 
                   Species=factor(iris$Species, 
                                  levels=c("versicolor", "setosa", "virginica")))
with(iris2, boxplot(Petal.Length ~ Species))

par(op)

在此处输入图像描述

注意:确保不要levelslabels;混淆。在您的情况下,它们应该匹配。


推荐阅读