2017-07-01 3 views
1

Ich versuche, zwei Skalen parallel zueinander in ggplot2 wie folgt zu plotten.Reduzieren Sie den Abstand zwischen den einzelnen Achsen-Ticks in 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

Erhaltung des Seitenverhältnisses und Größe, wie der Raum zwischen norm und trans Schuppen zu reduzieren folgendes gewünschte Ergebnis zu erhalten? enter image description here

Antwort

2

expand=c(0,20) zu scale_x_discrete hinzugefügt und andere Eingänge manipuliert. Bisher sieht der Code wie:

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

ich versucht habe 'Thema (aspect.ratio = x)' und 'coord.fixed', aber es vermasselt die Größe und die Positionen von Text und Segmenten auf der Waage – Crops

+0

Bearbeitet. Wie gefällt es Ihnen? – AK88

Verwandte Themen