首页 > 解决方案 > 在箱线图中分离子组

问题描述

我使用箱线图可视化了一些数据。每个变量都属于一个子组,我想在箱线图中分隔/指示这些子组。要么在每个“变量组”之间创建一个小间隙,要么以某种方式在不同的变量所属的变量上指示而不使用fill = type. 下面我生成了一些可以作为示例数据的数据。

require(tidyverse)

set.seed(1234)
value <- sample(20:80, 1000, replace = T)
group <- sample(c("A1", "A2", "B1", "B2", "C1", "C2"), 1000, TRUE)

df <- as.data.frame(cbind(value, group))

df <- df %>%
  mutate(value = as.numeric(value),
         type = ifelse(grepl("*2", group),"Group 2", "Group1"),
         ) 

ggplot(df, aes(x=value, y =group))+
  geom_boxplot() +
  xlim(0, 100)

这给出了以下箱线图:

在此处输入图像描述

我尝试通过添加facet_wrap(~type, dir="v")生成以下图来对图进行分组:

在此处输入图像描述

但是,我不知道如何删除空变量(例如,在第 2 组中:A1、B2、C3)。

有谁知道如何在不使用的情况下以适当的方式(使用facet_wrap()或不使用)指示箱线图中的变量子组fill = type

标签: rggplot2visualizationboxplotkendo-dataviz

解决方案


您可以使用以下方法删除未使用的因子水平scales = "free"

library(dplyr)
library(ggplot2)

set.seed(1234)
value <- sample(20:80, 1000, replace = T)
group <- sample(c("A1", "A2", "B1", "B2", "C1", "C2"), 1000, TRUE)

df <- as.data.frame(cbind(value, group))

df <- df %>%
  mutate(value = as.numeric(value),
         type = ifelse(grepl("*2", group),"Group 2", "Group1"),
  ) 

ggplot(df, aes(x=value, y =group))+
  geom_boxplot() +
  xlim(0, 100) +
  facet_wrap(~type, dir="v", scales = "free")

reprex 包(v0.3.0)于 2020-09-11 创建


推荐阅读