¿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!

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.


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.


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())

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.