从R中的ggplot2图例中删除“重复”元素

时间:2013-06-06 14:19:17

标签: r ggplot2 legend aesthetics legend-properties

[已编辑为具有可运行代码和第二种方法]

我找到了几个似乎相关的链接hereherehere,但我无法直接看到如何申请他们对我的挑战:我有一个用ggplot2创建的线图,它绘制了一个数据框,包括上下置信区间。我希望他们只是在图例中显示为“99%CI”,而不是单独说“Upper CI”和“Lower CI”。

library(ggplot2)
library(reshape2)

gmm   <- data.frame(x=runif(10), observed=runif(10), theoretical=runif(10), 
                upper=runif(10), lower=runif(10))
gmm.m <- melt(gmm, id="x")

p1 <- ggplot(data=gmm.m, aes(x, value, colour=variable)) + geom_line() 

p1 <- p1 + scale_colour_manual(
        values=c("black", "#F8766D", "#7DAF01", "#7DAF01"), 
        labels=c("Observed","Theoretical","99% Confidence Intervals",""))

将最后一个图例标签设置为空“”就像我对它进行排序一样接近。所以为了清楚起见,我希望两个CI在线图上以相同的颜色显示,我只是不希望它们显示为单独的图例项。

怀疑这样做的一种方法是在跳过'lower'时融化其他变量,然后再添加它。但是,除了(个人)发现这种方法不够优雅(更容易说“添加一切,但隐藏传说中的这一个”),我尝试这样做也失败了。

library(ggplot2)
library(reshape2)
gmm   <- data.frame(x=runif(10), observed=runif(10), theoretical=runif(10), upper=runif(10))
gmm.m <- melt(gmm, id="x")
gmm.b <- data.frame(x=runif(10),variable='lower', value=runif(10))
p1 <- ggplot(data=gmm.m, aes(x, value, colour=variable)) + geom_line() + scale_colour_manual(values=c("black", "#F8766D", "#7DAF01"), labels=c("Observed","Theoretical","99% Confidence Intervals",""))
p1 <- p1 + geom_line(data=gmm.b, aes(x=x, y=value, legend=FALSE))
plot(p1)

1 个答案:

答案 0 :(得分:0)

以下是我在评论中提到的方法:

dat <- rbind(gmm.m,gmm.b)
dat$variable <- as.character(dat$variable)
dat$var1 <- dat$variable
dat$var1[dat$var1 %in% c('upper','lower')] <- '99% CI'

ggplot(dat,aes(x = x,y = value)) + 
    geom_line(aes(colour = var1,group = variable))

(我只转换为角色,因为它比操纵因素更容易操作,恕我直言。)

正如我所说,使用一个变量来描绘分组(用于绘制线条)和另一个变量来描绘哪些点获得相同的颜色。