着色点在R中刻面ggplot2图的边缘内的因子

时间:2013-05-06 12:01:14

标签: r ggplot2 facets

我想在ggplot2中创建一个带边距的刻面图。但是,我希望边距图可以根据特定点的派生面来获得颜色。最好用一个例子来说明:

library(ggplot2)

p <- ggplot(mtcars, aes(mpg, wt)) + geom_point()
p + facet_grid(.~gear, margins = TRUE)

在标记为“(全部)”的边距图中,我希望那些具有“gear = 3”的点用一种颜色绘制,带有“gear = 4”和第二种颜色的那些点和带有“齿轮”的那些点= 5“,第三个。

这个不起作用:

p <- ggplot(mtcars, aes(mpg, wt)) + geom_point(aes(col=gear))
p + facet_grid(.~gear, margins = TRUE)

有没有办法达到我想要的目的?

2 个答案:

答案 0 :(得分:3)

如何创建一个新变量作为参考并按点着色点?似乎工作,只要你不介意前3个方面的点也被着色。

mtcars$ref <- as.factor(mtcars$gear)

p <- ggplot(mtcars, aes(mpg, wt)) + geom_point(aes(col=as.factor(gear)))
p + facet_grid(.~ref, margins = TRUE)

All points coloured by gear

编辑:我已经设法让它从前三个方面中删除了颜色键,但没有使用原始数据;

复制原始数据(因此每条记录中有2条)然后使用边距图来生成&#34; all&#34;方面,改为使用冗余记录。

library(ggplot2)

mtcars$ref <- (mtcars$gear)

# create the duplicate
dat <- do.call("rbind", replicate(2, mtcars, simplify = FALSE)) 

# give the duplicates a false value for "gear" so they can be plotted together 
#This value can then be used for faceting, grouping everything with "all".

dat$ref[1:32] <- "all" 


# where not in the "all" facet, change "gear" to one (so they are plotted with the same colour)
dat$gear[dat$ref != "all"] <- 1

# then plot using ref as the facet and gear to colour points.

p <- ggplot(dat, aes(mpg, wt)) + geom_point(aes(col=as.factor(gear)))
p + facet_grid(.~ref, margins = F)

Points only coloured by gear in final facet

我不确定这是解决这个问题的最好方法,但也许有更多专业知识的人可能会提出建议?

答案 1 :(得分:1)

另一种选择是分别创建刻面图和边距图,并使用gridExtra库来组合它们:

library(ggplot2)
library(gridExtra)
mtcars$ALL <- "all"
p <- ggplot(mtcars, aes(mpg, wt))
p1 <- p + geom_point() + facet_grid(.~gear)
p2 <- p + geom_point(aes(color=factor(gear))) + facet_grid(.~ALL)
grid.arrange(p1, p2, ncol=2)

enter image description here