2015-11-02 90 views
1

我有一个有三个ECDF和三条垂直线条的绘图,并且无法获得stat_ecdf图例的线条颜色以匹配实际的线条颜色。无法获取stat_ecdf图例的线条颜色以匹配绘图颜色和删除水平线条

这里是刚刚ECDF情节代码:

set.seed(124) 
allDTI <- data.frame(values=rnorm(1000,500,200),type=sample(LETTERS[1:3],1000,T)) 
meanALLDTI <- ddply(allDTI, "type", summarise, values.mean=mean(values, na.rm=TRUE), n) 


ggplot(allDTI, aes(x=values, color=type)) + 
    stat_ecdf(size=1, show_guide=T) + 
    xlab(expression('Index Value')) + 
    ylab("Cumulative Density") + 
    ggtitle(expression(TI[d]~'and'~TI[l]~'and'~TI[w])) + 
    scale_x_continuous(expand = c(0,0)) + 
    scale_y_continuous(expand = c(0,0)) + 
    theme(text = element_text(size=20), 
     plot.title = element_text(size=30,face="bold",vjust=1), 
     axis.title.x=element_text(size=20,face="bold",vjust=0,hjust=0.5), 
     axis.title.y=element_text(size=20,face="bold",vjust=1.0,hjust=0.5), 
     legend.position = c(0.85, 0.25), 
     legend.text.align = 0, 
     legend.box = 'horizontal', 
     legend.margin = unit(45.0, 'line'), 
     legend.text=element_text(size=28,vjust=0,hjust=0), 
     legend.key.height = unit(1.5, 'line'), 
     legend.key.width = unit(1.5, 'line'), 
     panel.background = element_rect(fill = "white")) + 
    scale_color_manual(values=c('grey10','grey30','grey50'), 
        labels=c(expression(TI[d]),expression(TI[l]), 
           expression(TI[w]))) + 
    guides(color = guide_legend(title=NULL)) 

这里是剧情:

enter image description here

但我无法弄清楚如何添加垂直线我想以我想要添加的方式添加:

代码:

ggplot(allDTI, aes(x=values, color=type)) + 
     stat_ecdf(size=1, show_guide=T) + 
     xlab(expression('Index Value')) + 
     ylab("Cumulative Density") + 
     ggtitle(expression(TI[d]~'and'~TI[l]~'and'~TI[w])) + 
     scale_x_continuous(expand = c(0,0)) + 
     scale_y_continuous(expand = c(0,0)) + 
     theme(text = element_text(size=20), 
      plot.title = element_text(size=30,face="bold",vjust=1), 
      axis.title.x=element_text(size=20,face="bold",vjust=0,hjust=0.5), 
      axis.title.y=element_text(size=20,face="bold",vjust=1.0,hjust=0.5), 
      legend.position = c(0.85, 0.25), 
      legend.text.align = 0, 
      legend.box = 'horizontal', 
      legend.margin = unit(45.0, 'line'), 
      legend.text=element_text(size=28,vjust=0,hjust=0), 
      legend.key.height = unit(1.5, 'line'), 
      legend.key.width = unit(1.5, 'line'), 
      panel.background = element_rect(fill = "white")) + 
     scale_color_manual(values=c('grey10','grey30','grey50'), 
         labels=c(expression(TI[d]),expression(TI[l]), 
            expression(TI[w]))) + 
     guides(color = guide_legend(title=NULL)) + 
     geom_vline(data=meanALLDTI, aes(xintercept=values.mean, colour=type), 
       linetype="dashed", size=1, show_guide=T) + 
     scale_linetype_manual(values=c('grey10','grey30','grey50'), 
         labels=c(expression(bar(TI[d])),expression(bar(TI[l])), 
            expression(bar(TI[w])))) + 
     guides(linetype= guide_legend(title=NULL)) 

简介: enter image description here

由于我想要的一个例子,在这里是怎么出来的,我用密度图:

enter image description here

+0

为了去除水平线,您可以用'panel.grid.major.y = element_blank()'和'panel.grid.minor。 y = element_blank()'。为了更好地设置图例的样式,请参阅[本示例](http://stackoverflow.com/a/33237559/2204410) – Jaap

+1

此外:提供[可重现的示例]总是很好(http://stackoverflow.com/questions/ 5963269 /如何对化妆一个伟大-R-重复性,例如/ 5963610)。这使得其他人更容易帮助你。 – Jaap

+0

我不是在谈论数据框中的水平线。但传说中的水平线。另外,我已经完成了十多次这个例子,并且不知道该怎么做。另外,如果我新的如何轻松填充随机数据的数据帧,我会的。 – traggatmot

回答

1

一些试验和错误之后,我认为这是最好使用geom_segment以获得一个不错的传说。附:

ggplot(allDTI, aes(x=values, color=type)) + 
    stat_ecdf(size=1) + 
    geom_segment(data=meanALLDTI, aes(x=values.mean, xend=values.mean, y=0, yend=1, color=type, linetype = type), size=1) + 
    labs(title=expression(TI[d]~'and'~TI[l]~'and'~TI[w]), x="Index Value", y="Cumulative Density") + 
    scale_x_continuous(expand = c(0,0)) + 
    scale_y_continuous(expand = c(0,0)) + 
    scale_color_manual(values=c("grey10", "grey30", "grey50"), 
        labels=c(expression(TI[d]),expression(TI[l]),expression(TI[w]))) + 
    scale_linetype_manual(values=c(3,2,5), 
         labels=c(expression(TI[d]),expression(TI[l]),expression(TI[w]))) + 
    guides(color = guide_legend(title="color", 
           override.aes = list(color = c("grey10", "grey30", "grey50"), 
                size = 2)), 
     linetype = guide_legend(title="lty", override.aes = list(linetype = c(3,2,5), 
                    size = 0.7))) + 
    theme(text = element_text(size=20), 
     plot.title = element_text(size=30,face="bold",vjust=1), 
     axis.title.x = element_text(size=20,face="bold",vjust=0,hjust=0.5), 
     axis.title.y = element_text(size=20,face="bold",vjust=1.0,hjust=0.5), 
     legend.position = c(0.85, 0.25), 
     legend.box = 'horizontal', 
     legend.title = element_blank(), 
     legend.text.align = 0, 
     legend.text = element_text(size=20,vjust=0,hjust=0), 
     legend.key = element_rect(fill=NA), 
     legend.key.height = unit(1.5, 'line'), 
     legend.key.width = unit(1.5, 'line'), 
     panel.background = element_rect(fill = "white")) 

你:

enter image description here

+0

Jaap,考虑到我有两种不同的类型,你能评论一下为什么以我希望的方式设置两个不同的传说并不容易吗?我有垂直线,我有CDF,有人会认为我可以为每个设置一个图例,但这似乎不可能,对吧? – traggatmot

+0

@traggatmot这是因为如果你为两种不同类型的图例使用'type',那么图例会合并为一个。 – Jaap