ggplot:在具有不同类别组合的绘图中使用相同的形状/颜色

时间:2018-09-01 21:36:28

标签: r ggplot2

我有很多图,其中出现了类别的不同组合。因此,例如,图1具有类别A,B,D,图2具有类别A,C,D,图3具有类别A,B,C,D。我如何告诉ggplot为相同类别使用相同的形状和颜色每个情节?

我的设置基本上是这样的:

df1 <- as.data.frame(cbind(sample(4), sample(4), c("A", "A", "B", "D")))
df2 <- as.data.frame(cbind(sample(4), sample(4), c("B", "C", "C", "D")))
df3 <- as.data.frame(cbind(sample(4), sample(4), c("A","B", "C", "D")))

df.lst <- list(df1, df2, df3)

plt.lst <- list()

for(df in df.lst){

     plt <- ggplot(df, aes(x=V1, y=V2, color=V3, shape=V3)) +
         geom_point()

     plt.lst[[length(plt.lst)+1]] <- plt
}

grid.arrange(grobs=plt.lst)

为我提供了具有不同形状/颜色的相同类别:(

1 个答案:

答案 0 :(得分:1)

概述

使用@markus的建议,在创建3x1图(由facet_wrap()提供)之前将所有数据帧绑定到一个df中,将使您可以在具有不同图形的图形中看到相同的形状/颜色类别组合。

SS of facet wrap

代码

# load necessary package -------
library(tidyverse)

# collapse individual data frames into one --------
# so that your data is tidy
df <-
  list(df1 = data.frame(cbind(sample(4), sample(4), c("A", "A", "B", "D")))
       , df2 = data.frame(cbind(sample(4), sample(4), c("B", "C", "C", "D")))
       , df3 = data.frame(cbind(sample(4), sample(4), c("A","B", "C", "D")))) %>%
  bind_rows(.id = "origin")

# create a 3x1 plot -------
df %>%
  ggplot(aes(x = X1, y = X2, color = X3, shape = X3)) +
  geom_point() +
  facet_wrap(facets = vars(origin), nrow = 3, ncol = 1)

# end of script #