ggplot plot boxplot by label per columns?

时间:2018-06-05 13:29:46

标签: r ggplot2

我有以下数据框:

x1 x2  x3    y1 y2  y3 z1 z2   z3    label
1  54  -9    45 323 1  9  12  -0.1   1
5  21  -33.3 54 0.9 98 12 -87  5     2
12 1.3  0    23  12 65  7 -8   15    1  

我想绘制一个刻面图,它将按标签比较每一列。

例如x1值:2个boxplots,一个用于label == 1,而label == 2。 每个标签有9个方面,每个方块都有2个方框图。

我试图这样做:

test <- gather(df, key, value, -label)

ggplot(test, aes(x = factor(label), y = value)) +
  geom_boxplot() +
  facet_wrap(~ key)

请告知如何做到这一点?

1 个答案:

答案 0 :(得分:2)

您必须拥有长格式的数据框。使用包reshape2,您可以这样做。

m <- reshape2::melt(df, id.vars = "label")

ggplot(m, aes(x = label, y = variable)) +
  geom_boxplot() +
  facet_wrap( ~ variable)

就像OP在评论中所说的那样,使用包tidyr,这将按如下方式完成。

test <- tidyr::gather(df, key, value, -label)

ggplot(test, aes(x = label, y = key)) +
  geom_boxplot() +
  facet_wrap( ~ key)

数据。

df <- read.table(text = "
x1 x2  x3    y1 y2  y3 z1 z2   z3    label
1  54  -9    45 323 1  9  12  -0.1   1
5  21  -33.3 54 0.9 98 12 -87  5     2
12 1.3  0    23  12 65  7 -8   15    1  
", header = TRUE)