Cómo crear líneas de cuadrícula mayores y menores con diferentes estilos de línea en Python


122

Actualmente estoy usando matplotlib.pyplotpara crear gráficos y me gustaría tener las líneas de cuadrícula principales sólidas y negras y las menores en gris o discontinuas.

En las propiedades de la cuadrícula which=both/major/mine,, y luego el color y el estilo de línea se definen simplemente por estilo de línea. ¿Hay alguna forma de especificar solo el estilo de línea menor?

El código apropiado que tengo hasta ahora es

plt.plot(current, counts, 'rd', markersize=8)
plt.yscale('log')
plt.grid(b=True, which='both', color='0.65', linestyle='-')

Respuestas:


174

En realidad, es tan simple como configurar majory por minorseparado:

In [9]: plot([23, 456, 676, 89, 906, 34, 2345])
Out[9]: [<matplotlib.lines.Line2D at 0x6112f90>]

In [10]: yscale('log')

In [11]: grid(b=True, which='major', color='b', linestyle='-')

In [12]: grid(b=True, which='minor', color='r', linestyle='--')

El problema con las cuadrículas menores es que también debes tener activadas las marcas de verificación menores. En el código anterior esto se hace con yscale('log'), pero también se puede hacer con plt.minorticks_on().

ingrese la descripción de la imagen aquí


33
A veces también necesita llamar plt.minorticks_on()para que aparezca la cuadrícula menor. Ver stackoverflow.com/a/19940830/209246
eqzx

2
De los documentos : "Si se proporcionan kwargs, se supone que desea una cuadrícula y, por lo tanto, b se establece en True". - por lo que podría omitir b=True.
Miku

He intentado hacer lo mismo con el diagrama de doble registro. Desafortunadamente, el eje x muestra solo los grosores principales. ¿Es posible encender también los espesores menores?
Alexander Cska

1
@Alexander necesitas agregar un axis="both"parámetro a la plt.grid()función.
Kanmani

¿Existe una propiedad rcParam para convertir esto en el estilo predeterminado?
Kanmani

21

Una forma sencilla de hacerlo tú mismo sería hacer la cuadrícula tú mismo:

import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)

ax.plot([1,2,3], [2,3,4], 'ro')

for xmaj in ax.xaxis.get_majorticklocs():
  ax.axvline(x=xmaj, ls='-')
for xmin in ax.xaxis.get_minorticklocs():
  ax.axvline(x=xmin, ls='--')

for ymaj in ax.yaxis.get_majorticklocs():
  ax.axhline(y=ymaj, ls='-')
for ymin in ax.yaxis.get_minorticklocs():
  ax.axhline(y=ymin, ls='--')
plt.show()
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.