ggplot2:根据某些标准对facet中的data.frame进行分组

时间:2011-12-02 17:59:02

标签: r ggplot2

如果我有一个包含我想要绘制的数据的data.frame,那么在facet_wrap(或facet_grid)的不同图中“分组”数据的最简单方法是什么?

举一个具体的例子,如果数据框如下:

ID | P1 | P2 | P3 | P4 | P5
....(data)....

我希望在第一个方面有P1,P2,P3 over ID,第二个方面有P4 over ID,第三个是P5 over ID。

2 个答案:

答案 0 :(得分:3)

我怀疑我做了一个完全模仿你的例子,但希望你能明白这一点。 ggplot2图形的技巧是使用melt()将数据放入长格式。然后,您可以根据要对它们进行分组的方式创建facet变量。这是一个例子:

library(ggplot2)
dat <- data.frame(ID = rnorm(10), P1 = rnorm(10), P2 = rnorm(10), P3 = rnorm(10), P4 = rnorm(10), P5 = rnorm(10)) 
dat.m <- melt(dat, id.vars = 1)
#Create faceting variable
dat.m <- transform(dat.m, facet = ifelse(variable %in% c("P1", "P2", "P3"), 1, ifelse(variable == "P4", 2,3)))

ggplot(dat.m, aes(ID, value)) + geom_point() + facet_wrap(~facet)

enter image description here

答案 1 :(得分:2)

您基本上要求将cyl用作分面和分组变量。

在这里,我首先创建第二个变量 - cyl_class - 用作分面变量,并继续使用cyl进行分组:

library(ggplot2)

mpg$cyl_class <- cut(mpg$cyl,
                    breaks=c(3.5, 4.5, 5.5, 8.5),
                    labels=c("4", "5", "6-8"))

p <- qplot(cty, hwy, group=cyl, data = mpg)
p + facet_wrap(~ cyl_class) +
    geom_point(aes(colour=factor(cyl))) +
    scale_colour_discrete()

颜色可以改善(为了更好的对比度),而且这个例子很傻,但一般的方法是声音很容易适应。

enter image description here