Hacer que las líneas de cuadrícula verticales aparezcan en el diagrama de líneas en matplotlib

93

Quiero obtener líneas de cuadrícula horizontales y verticales en mi gráfico, pero solo las líneas de cuadrícula horizontales aparecen de forma predeterminada. Estoy usando unpandas.DataFrame consulta de SQL en Python para generar una gráfica de línea con fechas en el eje x. No estoy seguro de por qué no aparecen en las fechas y he intentado buscar una respuesta a esto pero no pude encontrar una.

Todo lo que he usado para trazar el gráfico es el código simple a continuación.

data.plot()
grid('on')

data es el DataFrame que contiene las fechas y los datos de la consulta sql.

También intenté agregar el código a continuación, pero sigo obteniendo el mismo resultado sin líneas de cuadrícula verticales.

ax = plt.axes()        
ax.yaxis.grid() # horizontal lines
ax.xaxis.grid() # vertical lines

¿Alguna sugerencia?

ingrese la descripción de la imagen aquí

Obispo de Osmond
fuente
data.plot(grid="on")trabajó para mí
Markus

Respuestas:

102

Puede que necesite dar un argumento booleano en sus llamadas, por ejemplo, use en ax.yaxis.grid(True)lugar de ax.yaxis.grid(). Además, dado que está utilizando ambos, puede combinarlos ax.grid, lo que funciona en ambos, en lugar de hacerlo una vez para cada dimensión.

ax = plt.gca()
ax.grid(True)

Eso debería arreglarte.

wim
fuente
Lo probé, pero por alguna razón todavía se ve igual que antes
Osmond Bishop
1
¿Está haciendo esto en un intérprete interactivo? Asegúrese de configurar la cuadrícula antes de llamarplt.show()
wim
Estoy usando iPython. He intentado agregar plt.show (), no hará ninguna diferencia.
Osmond Bishop
1
Bueno, esto es extraño. ¿Cuál es su versión de ipython? También intente ejecutarlo ipython --pylaby hágalo de plt.grid(True)inmediato: ¿ve la cuadrícula?
wim
Intenté plt.grid(True)y obtuve el gráfico vacío con las líneas de cuadrícula vertical y horizontal, así que sí, es extraño por qué no puedo obtener esto para mi gráfico de líneas. Estoy ejecutando la última versión disponible de iPython.
Osmond Bishop
57

plt.gca().xaxis.grid(True) resultó ser la solución para mí

mate
fuente
6
El myaxes.grid(which='x')no estaba funcionando para mí con la versión 1.4.2 matplotlib ... no podía conseguir la whichpalabra clave para el trabajo en absoluto. Sin embargo, myaxes.xaxis.grid(True)hizo el truco y es conceptualmente mejor en mi opinión. Ah, y no se olvide del myaxes.set_axisbelow(True)método útil para poner la cuadrícula detrás de los datos.
travc
25

Según la documentación de matplotlib , la firma del método de Axesclase grid()es la siguiente:

Axes.grid (b = None, which = 'major', axis = 'both', ** kwargs)
Activa o desactiva las cuadrículas de los ejes.

which puede ser 'mayor' (predeterminado), 'menor' o 'ambos' para controlar si las cuadrículas de ticks principales, las cuadrículas de ticks menores o ambas se ven afectadas.

axis puede ser 'ambos' (predeterminado), 'x' o 'y' para controlar qué conjunto de líneas de cuadrícula se dibujan.

Entonces, para mostrar líneas de cuadrícula tanto para el eje x como para el eje y, podemos usar el siguiente código:

ax = plt.gca()
ax.grid(which='major', axis='both', linestyle='--')

Este método nos da un control más preciso sobre qué mostrar para las líneas de la cuadrícula.

jdhao
fuente
6

tal vez esto pueda resolver el problema: matplotlib, definir el tamaño de una cuadrícula en una parcela

ax.grid(True, which='both')

La verdad es que la cuadrícula está funcionando, pero solo hay una cuadrícula en V en 00:00 y ninguna cuadrícula en las demás. Me encuentro con el mismo problema de que solo hay una cuadrícula el 1 de noviembre entre muchos días.

Lory_yang
fuente
3

Respuesta corta (lea a continuación para obtener más información):

ax.grid(axis='both', which='both')

ingrese la descripción de la imagen aquí

Lo que haces es correcto y debería funcionar.

Sin embargo, dado que el X eje en su ejemplo es un DateTime eje las principales casillas de marcas (muy probablemente) están apareciendo sólo en los dos extremos del eje X. Las otras marcas de graduación visibles son marcas de graduación menores .

El ax.grid()método, por defecto, dibuja líneas de cuadrícula en las marcas de graduación principales. Por tanto, no aparece nada en tu trama.

Utilice el siguiente código para resaltar las marcas de verificación. Los mayores serán azules mientras que los menores serán rojos.

ax.tick_params(which='both', width=3)
ax.tick_params(which='major', length=20, color='b')
ax.tick_params(which='minor', length=10, color='r')

Ahora para forzar que las líneas de la cuadrícula aparezcan también en las marcas de graduación menores, pase which='minor'al método:

ax.grid(b=True, which='minor', axis='x', color='#000000', linestyle='--')

o simplemente utilícelo which='both'para dibujar líneas de cuadrícula mayores y menores. Y esta es una línea de cuadrícula más elegante:

ax.grid(b=True, which='minor', axis='both', color='#888888', linestyle='--')
ax.grid(b=True, which='major', axis='both', color='#000000', linestyle='-')
Oscuro
fuente
1

Solo para líneas horizontales

ax = plt.axes()        
ax.yaxis.grid() # horizontal lines

Esto funcionó

Mudit
fuente