如何在ggplot2中控制哪些图形出现在哪个图例中?

3
我想使用ggplot绘制多层折线图,其中一层使用颜色图例,另一层使用线型图例。不幸的是,似乎两个图层都出现在了两个图例中,就像下面的简单示例一样:
hlines <- data.frame(Hline=c("a", "b"), y=c(-1,1))
vlines <- data.frame(Hline=c("x", "y"), x=c(-1,1))
ggplot() +
    geom_hline(data=hlines,
               aes(color=Hline, yintercept=y, linetype=NA),
               linetype="solid",
               show.legend=TRUE) +
    geom_vline(data=vlines,
               aes(linetype=Hline, xintercept=x, color=NA),
               color="black",
               show.legend=TRUE) +
    scale_color_hue(name="Hline color") +
    scale_linetype(name="Vline ltype") +
    xlim(-3, 3) + ylim(-3, 3)

该代码生成了以下图表: 已经有几个类似的问题,但是没有一个提出的解决方案可以修复此示例中的问题。例如,这个问题的答案是简单地从所有图例中删除一种几何元素,这不是我想要的,而这个问题似乎应该是我的问题的解决方案,但是上面的代码已经包含了答案,我仍然看到了问题。那么我该如何告诉ggplot在上面的示例中将垂直线条保留在颜色图例之外,将水平线条保留在线型图例之外?
1个回答

4
你所需要的只是:
ggplot() + 
    geom_hline(data = hlines, 
               aes(color = Hline, yintercept = y)) + 
    geom_vline(data = vlines, 
               aes(linetype = Hline, xintercept = x)) + 
    scale_color_hue(name = "Hline color") + 
    scale_linetype(name = "Vline ltype") + 
    xlim(-3, 3) + ylim(-3, 3)

具有适当图例的绘图

ggplot2aes中获取其图例规范。如果在geom_*函数之外但在aes内部,则会被绘制,但不会放入图例中。

如果指定show.legend = TRUE,则会覆盖此行为并绘制所有内容的图例;实际上,您需要show.legend = NA,这是默认值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接