我用以下代码制作了变量lsiete和lcinco:
qplot(lsiete, lcinco, data=enc, color=LENGTHE)
但是,我还希望通过以下因子变量为散点图赋予颜色,以便同时将其全部可视化:
> names(enc[,ind])
[1] "SEX" "RACE" "MSTATUS" "EDUC" "POSITION" "SATSCHED" "TYPESCH" "FLEX" "URBRUR" "HOURS"
[11] "SCHOOL" "ANJOB" "TYPERES" "LENGTHE" "HOWLONG" "REASONQ" "REASONW" "WHY"
所以,我想要一个面板,其中包含所有可能的散点图和上述条件。
如何编写代码来执行此操作?
编辑:为了更清楚,lsiete
和lcinco
没有变化,而是颜色变化中的变量
编辑2:给出一个可重复的例子。我使用随机数据创建以下数据框:
sn <- data.frame(a=rnorm(100),b=rnorm(100), cat1=sample(c('male', 'female'), 100, replace=TRUE),cat2=sample(c('U', 'AL'), 100, replace=TRUE),cat3=sample(c('AR', 'ML'), 100, replace=TRUE),cat4=sample(c('LM', 'KR'), 100, replace=TRUE))
我可以使用a和b创建一个qplot,并根据cat2:
给出颜色qplot(a,b,data=sn,color=cat2)
但是,我想保持a和b总是,并根据其余的分类变量给出颜色,以得到所有可能的散点图的面板。
答案 0 :(得分:3)
最简单的方法是重塑数据并使用分面。这将创建一个包含四个面板和一个共享图例的单个图。
sn2 <- tidyr::gather(sn, 'cat', 'col', cat1:cat1.1)
ggplot(sn2, aes(a, b, col = col)) + geom_point() + facet_wrap(~cat)
或者,如果您更喜欢单独的图例,您需要创建四个图并将它们拼接在一起,如下所示:
plot_fun <- function(cat) {
ggplot(sn, aes_(~a, ~b, col = cat)) + geom_point()
}
plot_list <- lapply(c(~cat1, ~cat2, ~cat3, ~cat1.1), plot_fun)
cowplot::plot_grid(plotlist = plot_list, align = 'hv')