2010-04-21 14 views
11

Questo è un seguito da this question, in which I was trying to suppress the vertical gridlines.Come posso sopprimere le linee della griglia verticale in un grafico ggplot2 mantenendo le etichette dell'asse x?

La soluzione, come fornita da learnr, consisteva nell'aggiungere scale_x_continuous (pause = NA), ma ciò ha avuto l'effetto collaterale di sopprimere anche le etichette dell'asse x. Sono assolutamente felice di scrivere le etichette di nuovo a mano, ma non mi è chiaro come capire dove dovrebbero andare le etichette.

L'altra opzione è quella di sopprimere tutte le linee della griglia (utilizzando opts (panel.grid.major = theme_blank()) o alcune di esse) e quindi ritrarre solo le griglie orizzontali principali. Di nuovo, il problema qui è come capire quali sono le interruzioni nella trama da fornire a geom_hline().

Quindi, in sostanza, le mie opzioni sono:.

  1. reprimere linee verticali e le etichette dell'asse x (utilizzando scale_x_continuous (pause = NA)) e aggiungere le etichette dell'asse x indietro nel
  2. Sopprimere tutto Griglie (usando opts (panel.grid.major = theme_blank())) e aggiungendo le griglie orizzontali principali usando geom_hline().

Qui ci sono due opzioni:

library(ggplot2) 

data <- data.frame(x = 1:10, y = c(3,5,2,5,6,2,7,6,5,4)) 

# suppressing vertical gridlines and x-axis labels 
# need to re-draw x-axis labels 
ggplot(data, aes(x, y)) + 
    geom_bar(stat = 'identity') + 
    scale_x_continuous(breaks = NA) + 
    opts(
    panel.grid.major = theme_line(size = 0.5, colour = '#1391FF'), 
    panel.grid.minor = theme_blank(), 
    panel.background = theme_blank(), 
    axis.ticks = theme_blank() 
) 

# suppressing all gridlines 
# need to re-draw horizontal gridlines, probably with geom_hbar() 
ggplot(data, aes(x, y)) + 
    geom_bar(stat = 'identity') + 
    scale_x_continuous(breaks = NA) + 
    opts(
    panel.grid.major = theme_blank(), 
    panel.grid.minor = theme_blank(), 
    panel.background = theme_blank(), 
    axis.ticks = theme_blank() 
) 
+0

È possibile utilizzare geom_text() per aggiungere manualmente le etichette di graduazione sull'asse x. – learnr

risposta

5

come codice nei commenti non visualizza bene, così mi distacco questa come una risposta. Si potrebbe fare qualcosa di simile e aggiungere etichette manualmente con geom_text():

ggplot(data, aes(x, y)) + 
     geom_bar(stat = 'identity') + 
     scale_x_continuous(breaks = NA) + 
     opts(
       panel.grid.major = theme_line(size = 0.5, colour = '#1391FF'), 
       panel.grid.minor = theme_blank(), 
       panel.background = theme_blank(), 
       axis.ticks = theme_blank() 
     )+ 
     geom_text(aes(label = x, y = -.3)) 
+0

Oh, duh - Ero confuso perché, per ridisegnare le griglie orizzontali, avevo bisogno di sapere dove erano le rotture/segni di graduazione, ma conosco già le posizioni x per le barre, quindi questo non è un problema. Grazie mille per il vostro aiuto, LearnR! – Tarek

+2

Solo un'altra breve nota qui - questa risposta risolve la mia domanda come detto, ma non è sicuramente la soluzione ideale, poiché stiamo disegnando le x-label nell'area del tracciato, non nel margine.Ciò ha effetti a catena per la gamma y e le interruzioni, quindi sarebbe preferibile una soluzione disaccoppiata dall'area dati. Hadley, non so se stai leggendo questo, ma un modo per spegnere le linee orizzontali o verticali sarebbe fantastico ... – Tarek

1

Si può fare questo modifica il grob direttamente, tenta:

grid.remove(gPath("panel.grid.minor.x.polyline"),grep=T) 
grid.remove(gPath("panel.grid.major.x.polyline"),grep=T) 

Sarà togliere le linee verticali. Ho solo problemi ad usarlo all'interno di una funzione, perché suppongo che funzioni solo quando viene stampato il ggplot.

Ma, se questo non è il tuo caso e avrai solo bisogno della grafica, che funzionerà.

2

Le risposte di cui sopra non funziona in ggplot2 versione 0.9.2.1 e superiori. Fortunatamente, ora c'è un modo più semplice per farlo, come descritto in risposta a una domanda diversa: https://stackoverflow.com/a/8992102/800044.

Problemi correlati