105 votes

Comment puis-je supprimer les lignes de grille verticales dans un graphique ggplot2 ?

Je suis en train de construire un diagramme à barres pour lequel les barres suffisent comme indications de placement horizontal (x), donc j'aimerais éviter de dessiner les lignes de grille verticales superflues.

Je comprends comment styliser les lignes de grille mineures et majeures dans opts(), mais je n'arrive pas, pour la vie de moi, à comprendre comment supprimer uniquement les lignes de grille verticales.

library(ggplot2)

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

ggplot(data, aes(x, y)) +
  geom_bar(stat = 'identity') +
  theme(
    panel.grid.major = element_line(size = 0.5, colour = '#1391FF'),
    panel.grid.minor = element_line(colour = NA),
    panel.background = element_rect(colour = NA),
    axis.ticks = element_line(colour = NA)
  )

À ce stade, il semblerait que je vais devoir supprimer toutes les lignes de grille et ensuite les redessiner avec geom_hline(), ce qui semble un peu contraignant (aussi, il n'est pas tout à fait clair comment je peux trouver les positions des lignes de repère/majeures pour les donner à geom_hline().)

Toute suggestion serait appréciée!

213voto

dave.ponet Points 321

Dès ggplot2 0.9.2, il est devenu beaucoup plus facile de le faire en utilisant les "thèmes". Vous pouvez maintenant affecter des thèmes séparément à panel.grid.major.x et panel.grid.major.y, comme le montre l'exemple ci-dessous.

#   simuler des données pour le graphique à barres
data <- data.frame( X = c("A","B","C"), Y = c(1:3) )    

#   créer le graphique à barres
ggplot( data  ) +
    geom_bar( aes( X, Y ) ) +
    theme( # supprimer les lignes verticales de la grille
           panel.grid.major.x = element_blank() ,
           # définir explicitement les lignes horizontales (sinon elles disparaîtront également)
           panel.grid.major.y = element_line( size=.1, color="black" ) 
    )

Le résultat de cet exemple est assez moche, mais il montre comment supprimer les lignes verticales tout en conservant les lignes horizontales et les marques de graduations sur l'axe des x.

36voto

learnr Points 1585

Essayez d'utiliser

scale_x_continuous(breaks = NULL)

Cela supprimerait toutes les lignes de grille verticales ainsi que les étiquettes des repères de l'axe des x.

8voto

Karagold Points 51

Option 1:

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

ggplot(data_df, aes(x, y)) +
  geom_bar(stat = 'identity') +
  theme(panel.background = element_rect(fill = "white"))

Option 2:

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

ggplot(data_df, aes(x, y)) +
      geom_bar(stat = 'identity') +
      theme(
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        panel.grid.major.y = element_blank(),
        panel.grid.minor.y = element_blank()
      )

4voto

James Howison Points 41

Consultez l'édition au niveau de la grille pour une autre option:

https://github.com/hadley/ggplot2/wiki/Editing-raw-grid-objects-from-a-ggplot

4voto

M0M Points 21

Cela ne vous laisse qu'avec les points de données:

ggplot(out, aes(X1, X2)) + 
    geom_point() + 
    scale_x_continuous(breaks = NULL) + 
    scale_y_continuous(breaks = NULL) + 
    opts(panel.background = theme_blank()) + 
    opts(axis.title.x = theme_blank(), axis.title.y = theme_blank())

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X