2017-05-26 57 views
-3

我有一个由40个数字向量组成的list。我的问题是,如何为每个矢量做一个箱形图,并将每4个箱形图组分成x轴上的一个位置。如何从(可变长度)向量列表制作箱形图

这就是X轴将有10个刻度,每个刻度有4个盒子图。此外,我想按照组中的顺序对箱形图进行着色。

下面是数据的一个小样本(两组):

list(
    c(1, 3, 3, 4, 2, 1, 1, 2), 
    c(2, 1, 1, 1, 1, 2, 33, 12), 
    c(5, 3, 2, 1, 2, 3, 4, 5), 
    c(4, 4, 2, 2, 2, 1, 3, 4), 
    c(2, 2, 21, 1, 4), 
    c(3, 3, 1, 2, 3), 
    c(2, 2, 3, 1, 1), 
    c(6, 5, 3, 4, 5)) -> 
ll 
+0

有可能是与像'ggplot()+ geom_bar一个简单的解决方案(AES(单位,填写=方法),位置= “躲闪”)',但你需要提供更精确例如“相似长度”是什么意思的细节。尝试提供一个实际的数据样本。 – liborm

+0

我不知道为什么我有三个负面的分数。我找到的相关答案是针对所有行具有相似大小的数据框。 – Eric

+1

反对票可能是因为需要英勇的努力才能正确理解数据的类型和形状。我非常清楚你需要什么类型的输出,但我对输入数据非常困惑。它是'list'的list,它是'data.frame'吗?有两个'data.frame's? – liborm

回答

1

,从数字载体和组它的列表为四元组创建箱线图,你需要做的是这样的:

library(tidyverse) 

# ll is the list of vectors 
map_df(ll, 
    function(x) data.frame(val = x), 
    .id = "row") %>% 
    mutate(
    row = as.numeric(row) - 1, 
    grp = floor(row/4) %>% as.factor, 
    method = (row %% 4) %>% as.factor) %>% 
    ggplot() + 
    geom_boxplot(aes(grp, val, fill=method), position = "dodge") 

简言之:map_df每个向量到数据帧转换与一个柱,然后行结合所有这些,加上一个名为row其标识在哪里原始行的来源列,mutate转换row至0巴sed numeric并且基于原始向量索引(每四分之一是使用模的下一个分组)添加grpmethod列,ggplot初始化该图,geom_boxplot添加从该表获取数据的盒图层。


样本数据的输出(由于异常值而有点难看)。

output for the sample data

+0

谢谢@liborm。 – Eric