2015-11-02 57 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