使用facet_wrap的多个直方图

时间:2017-08-22 11:58:34

标签: r ggplot2 facet-wrap

我有一个看起来像这样的数据框

x <- data.frame("raw_A" = runif(20, 2, 10), "raw_B" = runif(20, 2, 10), "mod_A" = runif(20, 2, 10), "mod_B" = runif(20, 2, 10), "modmod_A" = runif(20, 2, 10), "modmod_B" = runif(20, 2, 10), "raw_C"
    = runif(20, 2, 10), "raw_D" = runif(20, 2, 10), "mod_C" = runif(20, 2, 10), "mod_D" = runif(20, 2, 10), "modmod_C" = runif(20, 2, 10), "modmod_D" = runif(20, 2, 10), "raw_E" = runif(20, 2, 10), "raw_F" = runif(20, 2, 10), "mod_E" = runif(20, 2, 10), "mod_F" = runif(20, 2, 10), "modmod_E" = runif(20, 2, 10), "modmod_F" = runif(20, 2, 10))

我想做什么,所以使用ggplot绘制一系列直方图

geom_histogram(position = "identity", alpha = 0.8, bins = 100)

(A vs B,C vs D,E vs F)。

在第一列A对B中使用facet_wrap,在第二列C对D和第三列E对F中使用{。}

同时在第一行中我需要raw_,在第二行mod_和最后一行modmod_

,例如

raw_A vs raw_B       |       raw_C vs raw_D       |       raw_E vs raw_F

mod_A vs mod_B       |       mod_C vs mod_D       |       mod_E vs mod_F

modmod_A vs modmod_B |    modmod_C vs modmod_D    |    modmod_E vs modmod_F

我该怎么做?

1 个答案:

答案 0 :(得分:1)

由于您只需要特定的变量组合,因此最好选择性地进行。一个选项可以是根据需要生成数据集:

df <- rbind(data.frame(x=x$raw_A, y=x$raw_B, comb='raw_A vs raw_B'),
            data.frame(x=x$raw_C, y=x$raw_D, comb='raw_C vs raw_D'),
            data.frame(x=x$raw_E, y=x$raw_F, comb='raw_E vs raw_F'),

            data.frame(x=x$mod_A, y=x$mod_B, comb='mod_A vs mod_B'),
            data.frame(x=x$mod_C, y=x$mod_D, comb='mod_C vs mod_D'),
            data.frame(x=x$mod_E, y=x$mod_F, comb='mod_E vs mod_F'),

            data.frame(x=x$modmod_A, y=x$modmod_B, comb='modmod_A vs modmod_B'),
            data.frame(x=x$modmod_C, y=x$modmod_D, comb='modmod_C vs modmod_D'),
            data.frame(x=x$modmod_E, y=x$modmod_F, comb='modmod_E vs modmod_F')
            )

然后使用使用所需组合

创建的构面变量comb进行绘图
ggplot(df, aes(x, y)) + geom_point() + facet_wrap(~comb)

enter image description here

示例中生成的值的分布严格在2-10范围内,使用runif(20, 2, 10)随机生成。但是,在其他情况下,如果变量的分布不像这样严格,则可以使用scales选项。

假设您已生成具有不同范围的以下变量的数据,其余变量与原始数据集中的数据相同。

        "modmod_A" = runif(20, 2, 6), "modmod_B" = runif(20, 2, 6), 
        "modmod_C" = runif(20, 2, 6), "modmod_D" = runif(20, 2, 6), 
        "modmod_E" = runif(20, 2, 6), "modmod_F" = runif(20, 2, 6)

您可以在下面的两个图中看到差异。

ggplot(df, aes(x, y)) + geom_point() + facet_wrap(~comb)

enter image description here

ggplot(df, aes(x, y)) + geom_point() + facet_wrap(~comb, scales="free")

enter image description here