我想在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)
有没有办法达到我想要的目的?
答案 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)
编辑:我已经设法让它从前三个方面中删除了颜色键,但没有使用原始数据;
复制原始数据(因此每条记录中有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)
我不确定这是解决这个问题的最好方法,但也许有更多专业知识的人可能会提出建议?
答案 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)