创建多个图表需要有一个共同的色标。
使用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
?
答案 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])
}