R ggplot订单图例geom_smooth和geom_abline

时间:2018-04-11 06:31:22

标签: r ggplot2 legend

我发现很多其他帖子解释了如何手动更改ggplot2生成的图例的顺序,我已经尝试了所有的建议但仍然无法找到答案......

在我的情节中,我显示了geom_smooth(带有lm函数)的线性回归线和我使用geom_abline任意拟合的另一条线。

ggplot(women, aes(x=height, y=weight)) +
  geom_point(size=3, shape = 21, color="black") +
  geom_smooth(method = "lm", aes(color= "fit2", linetype = "fit2"), lwd=1, se = FALSE, show.legend = F) + 
  geom_abline(aes(intercept = -100, slope = 3.5, color="fit1", linetype = "fit1")) +
  scale_colour_manual(name="Legend", values = c("fit1" = "blue", "fit2" = "red")) +
  scale_linetype_manual(name="Legend", values = c("fit1" = "solid", "fit2" = "dashed"))

这会自动生成带有“fit1”和“fit2”的图例,但我希望“fit2”显示在“fit1”上方。很多帖子建议在我的数据框中重新排序数据,例如d$a <- factor(d$a, levels = d$a),但由于我的geom_abline是一个任意行,我不能这样做。我尝试了scale_fill_discrete(breaks=c("fit2","fit1"))guides(fill = guide_legend(reverse = TRUE)),但都没有用。有没有其他方法可以强制“fit2”显示在“fit1”之上?

1 个答案:

答案 0 :(得分:1)

ggplot2在将变量(即列名称)映射到geoms(行,点等。及其相关属性 - 颜色,大小)时效果最佳,使用{{1 }}。当数据 tidy 时,您可以免费获得传奇和#34;等等。在aes()内查看变量的引用字词通常不是一个好兆头。

因此,我将以不同方式处理此任务:

  1. 使用aes()进行线性回归
  2. 使用lm()broom::augment输出
  3. 创建数据框
  4. 使用lmdplyr::mutate
  5. 创建新列
  6. fit1将数据整理成整洁的数据框
  7. tidyr::gatherfit1转换为您可以重新排序的因素
  8. fit2颜色映射到geom_linefit1

    fit2
  9. enter image description here