在ggplot2中手动显示图例

时间:2018-05-14 01:08:02

标签: r ggplot2

我正在一个图中绘制两个回归模型,彼此重叠。但我无法显示传奇。我正在使用代码:

ggplot(df, aes(x)) +                    # basic graphical object
    geom_smooth(aes(y = predict(regressor1)), colour = "black") +
    geom_smooth(aes(y = predict(regressor2)), colour = "blue") +
    labs(x = "Distance from the scanner", y = "RMSE (m)") +
    scale_colour_manual(name = "", values = c("black" = "Moo", "blue" = "Coo"), 
                        guide = 'legend') +
    guides(colour = guide_legend(override.aes = list(linetype = c(1, 0), 
           shape = c(NA, 16)))) +
    theme_classic() +
    theme(panel.grid.major = element_blank(),
          panel.grid.minor = element_blank(),
          axis.title.x = element_text(size = 16),
          axis.title = element_text(size = 16),
          axis.text.x = element_text(size = 14, colour = "black"),
          axis.text.y = element_text(size = 14, colour = "black"))

如何手动显示图例?

1 个答案:

答案 0 :(得分:0)

ggplot2的技巧通常是只有一个数据帧的所有绘图。您最好将regressor1和regressor2合并为数据框中的一列,并设置另一个说明他们所属的组。

像这样的东西

regressor_frame <- data.frame(Predictions = c(predict(regressor1), predict(refressor2)),
                              Regressor = c(rep(1, length(regressor1)), rep(2, length(regressor2))
                              )

所以现在我们有一个数据框,其中一列存储您的预测,另一列存储预测来自哪个回归!

然后将这些列绑定到当前数据框

df <- cbind(df, regressor_frame)

这将起作用,因为它们具有相同的行数!

然后在geom_smooth参数中我们可以添加一个名为colour的新变量,它将分别绘制它们。用

替换这两个geom_smooth
geom_smooth(aes(y=Predictions, colour = Regressor)) 

然后你的色阶参数看起来像这样

scale_colour_manual(values = c("Black", "Blue"))

那应该能满足你的需求。

更一般地说,如果您希望某些内容依赖于数据的属性,那么它应该位于aes函数中。在这种情况下,它来自哪个回归量会影响它,所以你应该使用它。

另外,ggplot2非常擅长策划你给它的东西。通常情况下,您最好将事物组合到一个数据框中,并使用特定的列来区分事物。