将vline添加到现有绘图并将其显示在ggplot2图例中?

时间:2012-09-22 15:55:24

标签: r ggplot2

我有一些数据用于绘制直方图。我还有两组具有一定意义的阈值。

我能够用适当的样式绘制直方图和vlines。但是,我无法让我的vlines显示在图例中。我相信这样的事情应该有效,但传奇项目不会显示。

df <- data.frame(val=rnorm(300, 75, 10))

cuts1 <- c(43, 70, 90)
cuts2 <- c(46, 79, 86)

ggplot(data=df, aes(x=val)) +
  geom_histogram() +
  geom_vline(xintercept=cuts1,
             linetype=1,
             color="red",
             labels="Thresholds A",
             show_guide=TRUE) +
  geom_vline(xintercept=cuts2,
             linetype=2,
             color="green",
             labels="Thresholds B",
             show_guide=TRUE)

或者,如果我为剪辑构建一个data.frame并进行美学映射,我可以让我的vlines显示在图例中。不幸的是,这个图例给了我两个不同线型叠加在一起的实例:

cuts1 <- data.frame(Thresholds="Thresholds A", vals=c(43, 70, 90))
cuts2 <- data.frame(Thresholds="Thresholds B", vals=cuts2 <- c(46, 79, 86))

ggplot(data=df, aes(x=val)) +
  geom_histogram() +
  geom_vline(data=cuts1, aes(xintercept=vals, shape=Thresholds),
             linetype=1,
             color="red",
             labels="Thresholds A",
             show_guide=TRUE) +
  geom_vline(data=cuts2, aes(xintercept=vals, shape=Thresholds),
             linetype=2,
             color="green",
             labels="Thresholds B",
             show_guide=TRUE)

enter image description here

所以,最后,我正在寻找的是手动将两组线条添加到绘图中的最直接的方法,然后让它们在图例中正确显示。

1 个答案:

答案 0 :(得分:23)

诀窍是将阈值数据全部放在相同的数据框中,然后映射美学,而不是设置它们:

cuts <- rbind(cuts1,cuts2)

ggplot(data=df, aes(x=val)) +
  geom_histogram() +
  geom_vline(data=cuts, 
             aes(xintercept=vals, 
                 linetype=Thresholds,
                 colour = Thresholds),
             show_guide = TRUE)

enter image description here