如何正确表示ggplot2中图例中的hline和abline?

时间:2017-08-22 16:31:06

标签: r ggplot2

我正在尝试使用来自其他类似问题的线索,在ggplot2hlines ablines中创建一个图例。我接近使用以下代码(和示例图像)得到我需要的东西,但我似乎无法摆脱跨越图例图标的额外线条。

p <- ggplot(mtcars, aes(x = wt, y=mpg, col = factor(cyl))) + geom_point()
p + geom_hline(aes(lty="foo",yintercept=20)) +
  geom_hline(aes(lty="bar",yintercept=25)) +
  geom_hline(aes(lty="bar",yintercept=30)) +
  geom_abline(aes(lty = "regression", intercept = 10 , slope = 1)) +
  scale_linetype_manual(name="",values=c(2,3,1))

enter image description here

仅当我包含abline时,才会显示图例中的此行为。没有它,hline都会在图例中显示。

我在这里缺少什么?

作为辅助点:这两个hlines(标记为&#34; bar&#34;此处)这里使用完全相同的配置,但yintercept具有不同的值。我无法使用相同的命令绘制它们,并收到错误(Error: Aesthetics must be either length 1 or the same as the data (32): linetype, yintercept)。

每当我复制并粘贴这样的命令时,感觉就像我做得不对。是否可以设置两个yintercepts,同时手动定义线型以创建图例?

1 个答案:

答案 0 :(得分:2)

您可以在show.legend

中使用参数geom_abline
ggplot() +
  geom_point(aes(x = mtcars$wt, y=mtcars$mpg, col = factor(mtcars$cyl))) +
  geom_hline(aes(lty=c("foo", "bar","bar"),yintercept=c(20,25,30))) +
  geom_abline(aes(lty = "regression", intercept = 10 , slope = 1), show.legend = F) +
  scale_linetype_manual(name="",values=c(2,3,1) )

如果你没有在ggplot命令中定义数据,你可以只用一个命令定义所有的hlines:

ggplot(mtcars, aes(x = wt, y=mpg, col = factor(cyl))) + geom_point() +
 geom_hline(aes(lty="foo",yintercept=20)) +
  geom_hline(aes(lty="bar",yintercept=25)) +
  geom_hline(aes(lty="bar",yintercept=30)) +
  geom_abline(aes(lty = "regression", intercept = 10 , slope = 1), show.legend = F) +
  scale_linetype_manual(name="",values=c(2,3,1) )