如何在ggplot中添加多个级别的x轴 variable

如何在ggplot中添加多个级别的x轴 variable,r,ggplot2,axis,R,Ggplot2,Axis,您可以尝试对绘图进行切面处理 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","f

您可以尝试对绘图进行切面处理

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

plot您可以尝试在绘图上刻面

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

plot我建议按污染物分面绘制(并将主题和分面调整到与此近似的程度)。污染物之间的小间隙(就像你在刻面上看到的那样)会改善绘图。实际上我以前使用过刻面,但是x轴被分成四个线段,不能合并成一个线段。考虑到我想避免污染物之间的小间隙,我转向这个问题。那么你在ggplot2上就不走运了。没有间隙比有间隙更不利于数据的显示。您可以从中获取一些信息,也可以通过
面板.margin
消除面之间的空格。这与
facet\u wrap
中较新的
switch
参数相结合,似乎是一种获得所需情节的简单方法。我建议按污染物划分面(并将主题和面调整到与此近似的程度)。污染物之间的小间隙(就像你在刻面上看到的那样)会改善绘图。实际上我以前使用过刻面,但是x轴被分成四个线段,不能合并成一个线段。考虑到我想避免污染物之间的小间隙,我转向这个问题。那么你在ggplot2上就不走运了。没有间隙比有间隙更不利于数据的显示。您可以从中获取一些信息,也可以通过
面板.margin
消除面之间的空格。这与
facet\u wrap
的较新的
switch
参数相结合,似乎是获得所需绘图的简单方法。