我有以下数据框:
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)
请告知如何做到这一点?
答案 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)