¿Cómo puedo suprimir las líneas de cuadrícula verticales en un gráfico ggplot2?

81

Estoy construyendo un gráfico de barras para el que las barras son suficientes como indicaciones de la ubicación horizontal (x), por lo que me gustaría evitar dibujar las líneas de cuadrícula verticales superfluas.

Entiendo cómo diseñar las líneas de cuadrícula menores y mayores en opts (), pero por mi vida no puedo averiguar cómo suprimir solo las líneas de cuadrícula 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') +
  opts(
    panel.grid.major = theme_line(size = 0.5, colour = '#1391FF'),
    panel.grid.minor = theme_line(colour = NA),
    panel.background = theme_rect(colour = NA),
    axis.ticks = theme_segment(colour = NA)
  )

En este punto, parece que voy a tener que suprimir todas las líneas de cuadrícula y luego volver a dibujarlas con geom_hline (), lo que parece una especie de molestia (además, no está del todo claro cómo puedo encontrar la marca / posiciones principales de la cuadrícula para alimentar a geom_hline ().)

¡Cualquier pensamiento será apreciado!

Tarek
fuente

Respuestas:

24

Intenta usar

scale_x_continuous (cortes = NULL)

Esto eliminaría todas las líneas de cuadrícula verticales, así como las etiquetas de marca del eje x.

aprendiz
fuente
7
Eso fue todo, pero ahora, como notó, no tengo las etiquetas del eje x, que necesito, ¿alguna idea sobre cómo volver a escribirlas?
Tarek
18
La nueva versión dice:Please use breaks = NULL to remove breaks in the scale. (Deprecated; last used in version 0.8.9)
Stat-R
scale_x_discrete(breaks = NULL)es el que se utiliza cuando la variable x es discreta.
luchonacho
2
Esto no funciona cuando me gustaría tener etiquetas pero no pausas.
Groceryheist
@groceryheist no estoy seguro de si todavía está buscando una solución, pero encontré removeGrid de la biblioteca ggExtra aquí: rdrr.io removeGrid , que elimina las líneas de la cuadrícula mientras conserva las etiquetas de los ejes.
SHKT
175

A partir de ggplot2 0.9.2, esto se ha vuelto mucho más fácil de hacer usando "temas". Ahora puede asignar temas por separado a panel.grid.major.xy panel.grid.major.y, como se muestra a continuación.

#   simulate data for the bar graph
data <- data.frame( X = c("A","B","C"), Y = c(1:3) )    

#   make the bar graph
ggplot( data  ) +
    geom_bar( aes( X, Y ) ) +
    theme( # remove the vertical grid lines
           panel.grid.major.x = element_blank() ,
           # explicitly set the horizontal lines (or they will disappear too)
           panel.grid.major.y = element_line( size=.1, color="black" ) 
    )

El resultado de este ejemplo es bastante feo, pero demuestra cómo eliminar las líneas verticales conservando las líneas horizontales y las marcas del eje x.

Dave.ponet
fuente
2
tal vez esto necesite una actualización: me daError: stat_count() must not be used with a y aesthetic.
gaspar
El error aún existe a partir del 19/6/2020. Esta solución actualmente no funciona.
Meg
1
@Meg no estoy seguro de si todavía está buscando una solución, pero encontré removeGrid de la biblioteca ggExtra aquí: rdrr.io removeGrid , que elimina las líneas de la cuadrícula mientras conserva las etiquetas de los ejes.
SHKT
4

Esto te deja solo con los puntos de datos:

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())
M0M
fuente
Quizás esto necesite actualizarse. Cuando lo ejecuto, aparece el siguiente error: Error in opts (panel.background = theme_blank ()): no se pudo encontrar la función "opts" Tenga en cuenta que esta respuesta tampoco sigue la respuesta reprodicible del OP, que usa "datos" (no "out"), y "x" e "y", no "X1" y "X2".
Meg
0

Copiando mi respuesta de un hilo relacionado,

Para las personas que buscan esto en 2020, he encontrado una solución en forma de la función removeGrid de la biblioteca ggExtra aquí rdrr.io> removeGrid

Lo he probado para que funcione con ggplot2 versión 3.3.0 y ggExtra versión 0.9, lo que me da tics de eje sin las líneas de cuadrícula.

SHKT
fuente