2016-03-30 6 views
0
variable <-  c("PM10","SO2","NO","NO2","PM10","SO2","NO","NO2","PM10","SO2","NO","NO2","PM10","SO2","NO","NO2","PM10","SO2","NO","NO2","PM10","SO2","NO","NO2") 
sex <- c("male","male","male","male","female","female","female","female", 
    "male","male","male","male","female","female","female","female", 
    "male","male","male","male","female","female","female","female") 
exposureperiod <- c("P1","P1","P1","P1","P1","P1","P1","P1", 
       "P2","P2","P2","P2","P2","P2","P2","P2", 
       "P3","P3","P3","P3","P3","P3","P3","P3") 

set.seed(100) 
coef <- runif(24, -2, 2) 
coef_lb <- coef - 0.3 
coef_ub <- coef + 0.3 

df <- data.frame(variable,sex,exposureperiod,coef,coef_lb,coef_ub) 

df$variable <- factor(df$variable,levels=c("PM10","SO2","NO","NO2")) 
levels(df$variable) <- c("PM[10]","SO[2]", "NO", "NO[2]") 

df$exposureperiod <- factor(df$exposureperiod,levels=c("P1","P2","P3")) 
df$sex <- factor(df$sex,levels=c("male","female")) 

df <- df[order(df$variable,df$sex),] 

df$aux <- c(1,2,3, 
     5,6,7, 
     11,12,13, 
     15,16,17, 
     21,22,23, 
     25,26,27, 
     31,32,33, 
     35,36,37) 

library(ggplot2) 

plot <- ggplot(data = df, aes(x = aux, y = coef)) + 
    geom_pointrange(aes(ymin=coef_lb,ymax=coef_ub),shape="none") + 
    geom_point(aes(shape = exposureperiod)) + 
    scale_shape_discrete(name ="Exposure period", 
        breaks=c("P1", "P2","P3"), 
        labels=c("P1","P2","P3")) + 
    scale_x_continuous("Sex and Pollutant",breaks=c(2,6,12,16,22,26,32,36), 
       labels=c("Boys","Girls","Boys","Girls","Boys","Girls","Boys","Girls")) + 
    scale_y_continuous("Mean Difference in Tanner Stage", 
       limits=c(-3, 3), 
       breaks=round(seq(-3, 3, by = 0.5),1)) + 
    geom_hline(yintercept=0,alpha=1,linetype="dashed") + 
    theme(axis.text.x = element_text()) + 
    theme_bw(base_size = 16,base_family="Arial") + 
    theme(legend.text.align = 0, 
    legend.title = element_text(face="plain"), 
    legend.key = element_blank(), 
    legend.position = "bottom") + 
    guides(shape= guide_legend(nrow = 3,byrow = TRUE)) + 
    theme(text = element_text(colour = "black",face="plain"), 
    axis.title.y = element_text(face="plain"), 
    axis.title.x = element_text(face="plain"), 
    axis.text.x = element_text(face="plain",hjust = 0), 
    axis.text.y = element_text(face="plain")) + 
    theme(panel.background = element_blank(), 
    panel.grid.major = element_blank(), 
    panel.grid.minor = element_blank(), 
    panel.border = element_blank(), 
    axis.line = element_line(colour = "black"))+ 
    theme(axis.ticks = element_line(size = 1)) 

plot 

С приведенным выше скриптом я получил график, как показано ниже.Как добавить несколько уровней оси x в ggplot

enter image description here

Но я хочу добавить еще один уровень оси х, которые указывают на PM10, SO2, NO и NO2, как на графике ниже. (Чтобы проиллюстрировать это, я добавил эти загрязнители вручную.) И, конечно же, заголовок и легенда оси x должны соответственно уменьшаться.

Я использовал фасет раньше, но я хочу избежать разрыва между загрязняющими веществами, генерируемыми фасеткой.

спасибо.

enter image description here

+2

Я предлагаю фаску по загрязнителям (и настроить темы и аспекты к близкому приближению этого). Небольшие промежутки между загрязняющими веществами (как вы могли бы получить с фасетками) улучшили бы сюжет. – Roland

+0

На самом деле я раньше использовал грань, но ось x разделена на четыре отрезка линии и не может объединяться в одну. Учитывая, что я хочу избежать небольших пробелов между загрязнителями, я обращаюсь к этому. – cyrusjan

+0

Тогда вам не повезло с ggplot2. Отсутствие пробелов дает худшее представление ваших данных, а затем их наличие. – Roland

ответ

0

Вы можете попробовать огранку сюжета

plot <- plot + facet_wrap(~variable) 
Смежные вопросы