ggplot2:已知级别和子集的固定色标

时间:2015-03-09 14:15:26

标签: r ggplot2 legend

创建多个图表需要有一个共同的色标。 使用scale_color_manual很容易。但是如果并非所有级别都存在于每个情节中都会变得棘手,例如

doG = function(df) {
  df$g = factor(df$g, levels = c("red_dot", "green_dot", "blue_dot"))
  g = ggplot(df, aes(x = x, y = y, color = g)) + geom_point()
  g + scale_color_manual(values = c("red", "green", "blue"))
}
df = data.frame(x = 1:3, y = c(1,1,1), g = c("green_dot", "blue_dot", "red_dot"))
doG(df)

看起来很好,但后来

doG(df[1:2,])

摧毁所有的幻想。 有没有一些聪明的方法我可以为不存在所有因子水平的子集重用函数doG

1 个答案:

答案 0 :(得分:0)

确定。我想出了那个

doG = function(df) {
  ls = c("red_dot", "green_dot", "blue_dot")
  ls.col = c("red", "green", "blue")
  df$g = factor(df$g, levels = ls)
  g = ggplot(df, aes(x = x, y = y, color = g)) + geom_point()
  g + scale_color_manual(values = ls.col[ls %in% df$g])
}