2013-06-29 49 views
4

之间的空间,我有一个情节,看起来像这样:减少轴和GEOM

enter image description here

如何删除行的laft边缘和Y轴之间的空间,而不切断我的directlabels?

代码:

library(ggplot2) 
library(scales) 
labs <- c("Special Ed., Charter School", 
    "Gen. Ed., Charter School", 
    "Special Ed., Public School", 
    "Gen. Ed., Public School") 

pot <- data.frame(Engagement = c(643, 793, 590, 724, 735, 928, 863, 662), 
    Classroom = rep(rep(c("Special Ed.", "Gen. Ed."), each = 2), 2), 
    Gender = factor(rep(c("Male", "Female"), 4), levels = c("Male", "Female")), 
    School = rep(c("Charter", "Public"), each = 4), 
    ID = factor(rep(1:4, each = 2)), 
    labs = factor(rep(labs, each=2), levels=labs) 
    ) 

library(directlabels) 

xout <- ggplot(pot, aes(y = Engagement, x = Gender, group = ID)) + 
    geom_line(aes(color=labs), size=2) + theme_classic() + 
    scale_x_discrete(expand = c(.1, .3)) + 
    scale_color_hue(l=40) + 
    theme(text = element_text(size=22)) 

direct.label(xout, list('last.qp', cex=1.35)) 

回答

4

解决方法将是空的水平增加性别。

pot$Gender<-factor(pot$Gender,levels=c("Male","Female","")) 

然后在scale_x_discrete()使用drop=FALSE显示此水平。现在您可以更改expand=值。

+ scale_x_discrete(expand = c(0.01, 0.01),drop=FALSE) 

enter image description here

另一种可能是使用你的Gender为数字,然后用scale_x_continuous()设置limits=,然后提供breaks=labels=再次得到正确的标签。

xout <- ggplot(pot, aes(y = Engagement, x = as.numeric(Gender), group = ID)) + 
    geom_line(aes(color=labs), size=2) + theme_classic() + 
    scale_x_continuous(expand=c(0,0),"Gender",breaks=c(1,2), 
       labels=c("Male","Female"),limits=c(0.95,4)) + 
    scale_color_hue(l=40) + 
    theme(text = element_text(size=22)) 
+0

+1它像一个魅力工作。 –