2017-07-01 4 views
1

ggplot2に2つのスケールを平行にプロットしようとしています。以下、望ましい結果を得るためにnormtransスケール間のスペースを削減する方法を、縦横比やサイズを保存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

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

関連する問題