首页 > 解决方案 > 在 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"))

如何在此处手动显示图例?

标签: rggplot2

解决方案


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 非常擅长绘制你给它的东西。通常,最好将事物组合到一个数据框中,并使用特定的列来区分事物。


推荐阅读