Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用面_包裹的多个直方图图_R_Ggplot2_Facet Wrap - Fatal编程技术网

R 使用面_包裹的多个直方图图

R 使用面_包裹的多个直方图图,r,ggplot2,facet-wrap,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" = run

我有一个像这样的数据框

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))
(A对B,C对D,E对F)

使用
facet\u wrap
我希望在第一列A和B中,在第二列C和D中,在第三列E和F中

同时,在第一行中,我想要
raw\u
,在第二行中
mod\u
,在最后一行中
modmod\u

比如

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

我怎样才能做到这一点呢?

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

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')
            )


示例中生成的值的分布严格在
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)


无需引用您的列名。事实上,R甚至允许这是语言规范中的一个缺陷。
        "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)
ggplot(df, aes(x, y)) + geom_point() + facet_wrap(~comb, scales="free")