从共享aes名称的两个layes生成的图例中删除一个aes

时间:2014-10-08 20:31:58

标签: r ggplot2

我的问题是我想在一个线图上叠加一个散点图,这两个图是'用一个变量改变颜色。我只想保留一种颜色的图例。如果我使用scale_colour_discrete(guide = "none")它们都会消失。

可重复的例子是:

library(reshape2)

iris2 <- melt(iris, id.var = "Species")

ggplot(iris2, aes(x = variable, y = value, group = Species)) + 
    geom_point(aes(color = ifelse(value < 3, "type1", "type2"))) +
    geom_line(aes(color = Species))

我只想展示物种&#39;而不是类型。

3 个答案:

答案 0 :(得分:4)

在geom_point图层中设置show_guide=FALSE

ggplot(iris2, aes(x = variable, y = value, group = Species)) + 
    geom_point(aes(color = ifelse(value < 3, "type1", "type2")), show_guide=FALSE) +
    geom_line(aes(color = Species)) + 
    scale_colour_discrete("Species", breaks=levels(iris2$Species))

enter image description here

答案 1 :(得分:2)

我不确定当两者都与同一美学联系在一起时,你是否只能摆脱传奇的一部分。但这是一个解决方法:对你的点使用fill美学,然后摆脱fill美学的传说。在color=NA内设置geom_point可以摆脱每个点周围的边框颜色(默认情况下为黑色)。您还需要使用具有单独边框和填充的标记样式。有关可用的样式,请参阅?pch

library(reshape2)
library(ggplot2)

iris2 = melt(iris, id.var = "Species")

ggplot(iris2, aes(x = variable, y = value, group = Species)) + 
  geom_point(aes(fill = ifelse(value < 3, "type1", "type2")), 
             pch=21, color=NA) +
  geom_line(aes(color = Species)) +
  guides(fill=FALSE)

enter image description here

答案 2 :(得分:0)

这也是一种黑客攻击,但对其他美学更为普遍。它涉及倾倒美学,你不想做一个你想要的传奇。然后抓住那个传说。接下来,您绘制所需的绘图而没有图例。傻瓜边缘。在您想要的地块上注释您想要的图例。

library(reshape2)
library(gtable)

iris2 <- melt(iris, id.var = "Species")
myplot <-ggplot(iris2, aes(x = variable, y = value, group = Species)) + 
   # geom_point(aes(color = ifelse(value < 3, "type1", "type2"))) +
    geom_line(aes(color = Species))

legend_line <- grobTree(gtable_filter(ggplot_gtable(ggplot_build(myplot)), "guide-box"))

ggplot(iris2, aes(x = variable, y = value, group = Species)) + 
    geom_point(aes(color = ifelse(value < 3, "type1", "type2"))) +
    geom_line(aes(color = Species)) +
    guides(color=FALSE) +
    theme(plot.margin=unit(c(1,4,1,1),"cm")) +
    annotation_custom(grob = legend_line, xmin = 4, xmax = 6.5, 
        ymin = 3.5, ymax = 4.5)

enter image description here