如何使用tidyverse为不同的测量创建单独的构面?

时间:2018-02-12 23:57:26

标签: r ggplot2

我是一名新手程序员,希望绘制高度分组的变量。具体来说,我试图绘制一个由5个其他变量分组的变量。以下是我正在使用的示例数据。

library(ggplot2)
library(tibble)

set.seed(42)
mydf <- tibble(
  grp = rep(c('A', 'B'), length.out = 32, each = 16),
  sex = rep(c('M', 'F'), length.out = 32, each = 8),
  cond = rep(c('Wet', 'Dry'), length.out = 32, each = 4),
  measure = rep(c('Tempature', 'Volume'), length.out = 32, each = 2),
  kind = rep(c('Experimental', 'Control'), length.out = 32, each = 1),
  value = rnorm(32) * 100,
)


ggplot(mydf, aes(x = grp, y = value, col = cond)) + 
  geom_point() +
  facet_wrap(sex~measure + kind)

然而,输出相当混乱。是否可以为每次测量创建单独的刻面图?绘制此类数据的正确方法是什么?

谢谢

1 个答案:

答案 0 :(得分:1)

为了便于比较,我将面对不超过两个变量。在这种情况下,我也会使用facet_grid()而不是facet_wrap(),因为我认为如果它们位于不同的轴上,则更容易跟踪不同的构面尺寸。

在您的情况下,您希望区分5个二进制变量的测量值。

  1. GRP
  2. COND
  3. 测量
  4. x轴上的“grp”,颜色区分的“sex”,以及其余3个刻面中的2个,我们需要引入另一个美学参数来区分最后一个变量。

    这个的情况下,由于没有太多的点可以绘制,我建议形状

    ggplot(mydf, aes(x = grp, y = value, 
                     color = cond, 
                     shape = kind)) + 
      geom_point(size = 5, stroke = 2) +
      facet_grid(sex~measure) +
      scale_shape_manual(values = c("Control" = 4, "Experimental" = 16),
                         breaks = c("Experimental", "Control"))
    

    plot

    填充形状与未填充形状的使用使得实验点在视觉上与控制点不同。您可以查看其他形状选项here

    请注意,如果您的分组变量中有许多不同的值(例如沿x轴的5个类别,6种不同的颜色,20个构面组合等),或每个方面内的许多点,则图表看起来会非常繁忙,你可能想分成不同的图而不是把所有东西放在一起。