2013-01-23 11 views
20

Di seguito è riportato un codice di esempio di un grafico che esegue quasi esattamente ciò che desidero. L'unica cosa che voglio aggiungere sono i segni di spunta sull'asse x (stessa dimensione dei tick principali) in base alle spaccature minori definite di seguito.Aggiunta di segni di graduazione secondari all'asse x in ggplot2 (senza etichette)

df <- data.frame(x = c(1900,1950,2000), y = c(50,75,60)) 

p <- ggplot(df, aes(x=x, y=y)) 
    p + geom_line() + 
    scale_x_continuous(minor_breaks = seq(1900,2000,by=10), breaks = seq(1900,2000,by=50), limits = c(1900,2000), expand = c(0,0)) + 
    scale_y_continuous(breaks = c(20,40,60,80), limits = c(0,100)) + 
    theme(legend.position="none", panel.background = element_blank(), 
    axis.line = element_line(color='black'), panel.grid.minor = element_blank()) 

Grazie in anticipo, --JT

+7

Ho visto questa richiesta molte volte e non ho visto una buona risposta. Le opzioni che ho visto/utilizzato sono 1: usa le linee della griglia minori. 2: Aggiungete manualmente i segni di graduazione .. (Un po 'un approccio doloroso, ma posso immaginare una futura funzione/pacchetto in grado di farlo.) – N8TRO

+0

Autopromozione spudorata: vedere questo [risposta] (http://stackoverflow.com/ a/34533473/2726564) – manimal

risposta

18

Questo lo farebbe nel caso preciso:

scale_x_continuous(breaks= seq(1900,2000,by=10), 
        labels = c(1900, rep("",4), 1950, rep("",4), 2000), 
        limits = c(1900,2000), expand = c(0,0)) + 

Ecco una funzione che non è a prova di proiettile, ma lavora per inserire etichette vuote quando le etichette principali di inizio e fine sono allineate con i valori di avvio e arresto per l'argomento at:

insert_minor <- function(major_labs, n_minor) {labs <- 
           c(sapply(major_labs, function(x) c(x, rep("", 4)))) 
           labs[1:(length(labs)-n_minor)]} 

prova:

p <- ggplot(df, aes(x=x, y=y)) 
    p + geom_line() + 
    scale_x_continuous(breaks= seq(1900,2000,by=10), 
        labels = insert_minor(seq(1900, 2000, by=50), 4), 
        limits = c(1900,2000), expand = c(0,0)) + 
    scale_y_continuous(breaks = c(20,40,60,80), limits = c(0,100)) + 
    theme(legend.position="none", panel.background = element_blank(), 
     axis.line = element_line(color='black'), panel.grid.minor = element_blank()) 
+0

Grazie DWin. Questo funzionerà per quello che sto facendo. Non ho nemmeno pensato di renderli effettivamente tutti i principali segni di graduazione con etichette vuote. – JimmyT

+2

Immagino che sia veramente necessaria una funzione che inserirà spazi vuoti in una sequenza. Potrebbe essere una buona domanda di follow-up. –

+1

Re: inserimento di spazi vuoti in una sequenza: [qui] (http://stackoverflow.com/questions/34533472/insert-blanks-into-a-vector-for-eg-minor-tick-labels-in-r) my vai su di esso con un'applicazione di esempio con l'etichetta di tick minore – manimal

Problemi correlati