2017-07-01 91 views
1

我想绘制如下的ggplot2中彼此平行的两个刻度。减少ggplot2中离散轴刻度之间的空间

data <- rbind(data.frame(type = "norm", value = 0:100, label = 0:100), 
       data.frame(type = "trans", value = asin(0:100/100) *100, label = 0:100)) 

data <- data[data$label %% 1 == 0,] 
data$size <- ifelse(data$label %% 10 == 0, 0.2, 
        ifelse(data$label %% 5 == 0, 0.1, 
          0.05)) 
data$R <- ifelse(data$type == "norm", 
       as.numeric(data$type) - data$size, 
       as.numeric(data$type)) 
data$L <- ifelse(data$type == "trans", 
       as.numeric(data$type) + data$size, 
       as.numeric(data$type)) 
data$Txt <- ifelse(data$type == "norm", 
        data$L - 0.3, 
        data$R + 0.3) 

g <- ggplot(data, aes(x = type, y = value)) + 
    geom_line(aes(group = type)) + 
    scale_x_discrete("type", labels = parse(text = levels(data$type))) + 
    annotate("segment", x = data$L, xend = data$R, 
      y = data$value, 
      yend = data$value) + 
    annotate("text", x = data[data$label %% 10 == 0,]$Txt, 
      y = data[data$label %% 10 == 0,]$value, 
      label = data[data$label %% 10 == 0,]$label) + 
    theme_minimal() + 
    theme(axis.text.y = element_blank(), 
     axis.title = element_blank(), 
     axis.text.x = element_text(colour = "black", 
            size = 12), 
     plot.margin = unit(c(0.5,0.5,0.5,0.5), "cm"), 
     panel.grid.major = element_blank(), 
     panel.grid.minor = element_blank()) 

enter image description here

保留纵横比和尺寸,如何降低normtrans和鳞之间的空间,以得到以下所需的结果? enter image description here

回答

2

expand=c(0,20)加到scale_x_discrete并操纵其他输入。到目前为止,代码如下:

data <- data[data$label %% 1 == 0,] 
data$size <- ifelse(data$label %% 10 == 0, 4, 
        ifelse(data$label %% 5 == 0, 2, 
          1)) 
data$R <- ifelse(data$type == "norm", 
       as.numeric(data$type) - data$size, 
       as.numeric(data$type)) 
data$L <- ifelse(data$type == "trans", 
       as.numeric(data$type) + data$size, 
       as.numeric(data$type)) 
data$Txt <- ifelse(data$type == "norm", 
        data$L - 6, 
        data$R + 6) 

g <- ggplot(data, aes(x = type, y = value)) + 
    geom_line(aes(group = type)) + 
    scale_x_discrete("type", 
        expand=c(0,20)) + 
    annotate("segment", x = data$L, xend = data$R, 
      y = data$value, 
      yend = data$value) + 
    annotate("text", x = data[data$label %% 10 == 0,]$Txt, 
      y = data[data$label %% 10 == 0,]$value, 
      label = data[data$label %% 10 == 0,]$label) + 
    theme_minimal() + 
    theme(axis.text.y = element_blank(), 
     axis.title = element_blank(), 
     axis.text.x = element_blank(), 
     plot.margin = unit(c(0.5,0.5,0.5,0.5), "cm"), 
     panel.grid.major = element_blank(), 
     panel.grid.minor = element_blank()) 
g 

enter image description here

+0

我已经试过'主题(aspect.ratio = X)'和'coord.fixed',但它搅乱了尺寸和文字部分的位置在秤上 – Crops

+0

编辑。你觉得怎么样? – AK88

相关问题